001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package org.apache.geronimo.genesis.plugins.tools;
021
022 import java.io.File;
023
024 import org.codehaus.plexus.util.DirectoryScanner;
025
026 import org.apache.maven.plugin.MojoExecutionException;
027 import org.apache.maven.plugin.MojoFailureException;
028 import org.apache.maven.project.MavenProject;
029 import org.apache.tools.ant.taskdefs.Copy;
030 import org.apache.tools.ant.types.FileSet;
031
032 import org.apache.geronimo.genesis.MojoSupport;
033 import org.apache.geronimo.genesis.ant.AntHelper;
034
035 /**
036 * Copy legal files for inclusion into generated jars.
037 *
038 * @goal copy-legal-files
039 * @phase validate
040 *
041 * @version $Rev: 486420 $ $Date: 2006-12-12 15:51:25 -0800 (Tue, 12 Dec 2006) $
042 */
043 public class CopyLegalFilesMojo
044 extends MojoSupport
045 {
046 /**
047 * The default includes when no fileset is configured.
048 */
049 private static final String[] DEFAULT_INCLUDES = {
050 "LICENSE.txt",
051 "LICENSE",
052 "NOTICE.txt",
053 "NOTICE",
054 "DISCLAIMER.txt",
055 "DISCLAIMER"
056 };
057
058 /**
059 * Directory to copy legal files into.
060 *
061 * @parameter expression="${project.build.outputDirectory}/META-INF"
062 * @required
063 */
064 private File outputDirectory = null;
065
066 /**
067 * The basedir of the project.
068 *
069 * @parameter expression="${basedir}"
070 * @required
071 * @readonly
072 */
073 protected File basedir;
074
075 /**
076 * The set of legal files to be copied. Default fileset includes: LICENSE[.txt], NOTICE[.txt] and DISCLAIMER[.txt].
077 *
078 * @parameter
079 */
080 private DirectoryScanner fileset;
081
082 /**
083 * When set to true, fail the build when no legal files are found.
084 *
085 * @parameter default-value="false"
086 */
087 private boolean strict;
088
089 /**
090 * @component
091 */
092 private AntHelper ant;
093
094 //
095 // MojoSupport Hooks
096 //
097
098 /**
099 * The maven project.
100 *
101 * @parameter expression="${project}"
102 * @required
103 * @readonly
104 */
105 protected MavenProject project = null;
106
107 protected MavenProject getProject() {
108 return project;
109 }
110
111 //
112 // Mojo
113 //
114
115 protected void init() throws MojoExecutionException, MojoFailureException {
116 super.init();
117
118 ant.setProject(getProject());
119 }
120
121 protected void doExecute() throws Exception {
122 if (!shouldInstallLegalFiles(getProject())) {
123 return;
124 }
125
126 if (fileset == null) {
127 fileset = new DirectoryScanner();
128 fileset.setBasedir(basedir);
129 fileset.setIncludes(DEFAULT_INCLUDES);
130 }
131
132 fileset.addDefaultExcludes();
133 fileset.scan();
134
135 String[] filenames = fileset.getIncludedFiles();
136
137 if (filenames.length == 0) {
138 if (strict) {
139 throw new MojoExecutionException("No legal files found to copy");
140 }
141 else {
142 log.warn("No legal files found to copy");
143 }
144
145 return;
146 }
147
148 ant.mkdir(outputDirectory);
149
150 Copy copy = (Copy)ant.createTask("copy");
151 copy.setTodir(outputDirectory);
152
153 FileSet files = ant.createFileSet();
154 files.setDir(basedir);
155
156 for (int i=0; i<filenames.length; i++) {
157 files.createInclude().setName(filenames[i]);
158 }
159
160 copy.addFileset(files);
161
162 copy.execute();
163 }
164
165 private boolean shouldInstallLegalFiles(final MavenProject project) {
166 assert project != null;
167
168 //
169 // TODO: Expose a list of packagings
170 //
171
172 return !"pom".equals(getProject().getPackaging());
173 }
174 }