org.smallmind.license.TargetLicenseMojo.java Source code

Java tutorial

Introduction

Here is the source code for org.smallmind.license.TargetLicenseMojo.java

Source

package org.smallmind.license;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

// Installs license files for inclusion in distribution artifacts
@Mojo(name = "install-license-files", defaultPhase = LifecyclePhase.PREPARE_PACKAGE, threadSafe = true)
public class TargetLicenseMojo extends AbstractMojo {

    @Parameter(readonly = true, property = "project")
    private MavenProject project;
    @Parameter
    private Root root;
    @Parameter
    private Rule[] rules;
    @Parameter
    private String[] licenses;
    @Parameter(defaultValue = "false")
    private boolean verbose;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {

        if ((new File(project.getBuild().getOutputDirectory())).exists()) {

            MavenProject rootProject = project;
            byte[] buffer = new byte[8192];

            while ((root == null) ? !(rootProject.getParent() == null)
                    : !(root.getGroupId().equals(rootProject.getGroupId())
                            && root.getArtifactId().equals(rootProject.getArtifactId()))) {
                rootProject = rootProject.getParent();
            }

            for (String license : licenses) {

                File licenseFile;
                File copyFile;
                FileInputStream inputStream;
                FileOutputStream outputStream;
                int bytesRead;

                if (!(licenseFile = new File(license)).isAbsolute()) {
                    licenseFile = new File(rootProject.getBasedir() + System.getProperty("file.separator")
                            + licenseFile.getPath());
                }

                if (!licenseFile.exists()) {
                    getLog().warn(
                            String.format("Unable to acquire the license file(%s), skipping license copying...",
                                    licenseFile.getAbsolutePath()));
                } else {
                    if (verbose) {
                        getLog().info(String.format("Copying license(%s)...", licenseFile.getName()));
                    }

                    copyFile = new File(project.getBuild().getOutputDirectory()
                            + System.getProperty("file.separator") + licenseFile.getName());

                    try {
                        outputStream = new FileOutputStream(copyFile);
                    } catch (IOException ioException) {
                        throw new MojoExecutionException(
                                "Unable to create output license file (" + copyFile.getAbsolutePath() + ")",
                                ioException);
                    }

                    try {
                        inputStream = new FileInputStream(licenseFile);

                        while ((bytesRead = inputStream.read(buffer)) >= 0) {
                            outputStream.write(buffer, 0, bytesRead);
                        }

                        inputStream.close();
                    } catch (IOException ioException) {
                        copyFile.delete();
                        throw new MojoExecutionException(
                                "Problem in copying output license file (" + copyFile.getAbsolutePath() + ")",
                                ioException);
                    }

                    try {
                        outputStream.close();
                    } catch (IOException ioException) {
                        throw new MojoExecutionException(
                                "Problem in closing license file (" + licenseFile.getAbsolutePath() + ")",
                                ioException);
                    }
                }
            }
        }
    }
}