jatoo.maven.plugin.set_license.SetLicenseHeaderMojo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of maven-plugin-set-license Show documentation
Show all versions of maven-plugin-set-license Show documentation
A Maven™ Plugin to set the license in a project (insert headers in files, copy license file).
/*
* Copyright (C) Cristian Sulea ( http://cristian.sulea.net )
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jatoo.maven.plugin.set_license;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.DirectoryScanner;
/**
* The {@link Mojo} for header
goal.
*
* @author Cristian Sulea
* @version 3.0, May 17, 2017
*/
@Mojo(name = "header")
public class SetLicenseHeaderMojo extends AbstractMojo {
/** The license to be used, a sub-folder in the 'licenses' folder. */
@Parameter
private String license;
/** The text to be used for ${copyright} parameter. */
@Parameter
private String copyright;
/** The file containing the text to be used as the header. */
@Parameter
private File licenseHeader;
/** Default include patterns for directory scanner. */
@Parameter(defaultValue = "src/**/*.java")
private String[] includes;
/** Project the plugin is called from. */
@Component
private MavenProject project;
@Override
public final void execute() throws MojoExecutionException, MojoFailureException {
final Log log = getLog();
final String licenseHeaderText;
if (license == null) {
if (licenseHeader == null) {
throw new MojoExecutionException("both parameters 'license' and 'licenseHeader' are missing");
}
try {
licenseHeaderText = FileUtils.readFileToString(licenseHeader).trim();
} catch (IOException e) {
throw new MojoExecutionException("error reading license header file (" + licenseHeader + ")", e);
}
}
else {
if (copyright == null) {
throw new MojoExecutionException("the parameter 'copyright' is missing");
}
try {
licenseHeaderText = IOUtils.toString(getClass().getResource("licenses/" + license + "/HEADER")).replaceAll("\\$\\{copyright\\}", copyright).trim();
} catch (IOException e) {
throw new MojoExecutionException("error reading license (" + license + ") header", e);
}
}
log.info("license header text: " + IOUtils.LINE_SEPARATOR + licenseHeaderText);
final DirectoryScanner directoryScanner = new DirectoryScanner();
directoryScanner.setIncludes(includes);
directoryScanner.setBasedir(project.getBasedir());
directoryScanner.scan();
log.info("setting license header text on files:");
for (String file : directoryScanner.getIncludedFiles()) {
log.info(file);
try {
String fileContent = FileUtils.readFileToString(new File(project.getBasedir(), file));
int index = fileContent.indexOf("package ");
int indexComments = fileContent.indexOf("/**");
if (indexComments >= 0 && indexComments <= index) {
index = indexComments;
}
fileContent = fileContent.substring(index);
File targetFolder = new File(project.getBuild().getDirectory());
if (!targetFolder.exists() && !targetFolder.mkdirs()) {
throw new MojoExecutionException("error creating target folder");
}
FileUtils.write(new File(project.getBasedir(), file), licenseHeaderText + IOUtils.LINE_SEPARATOR + IOUtils.LINE_SEPARATOR + fileContent);
}
catch (IOException e) {
throw new MojoExecutionException("error writing license header in " + file, e);
}
}
}
}