com.teamtter.simplelicenses.GenerateDependenciesLicenseInfoMojo.java Source code

Java tutorial

Introduction

Here is the source code for com.teamtter.simplelicenses.GenerateDependenciesLicenseInfoMojo.java

Source

package com.teamtter.simplelicenses;

import java.util.List;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Component;
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.plugins.annotations.ResolutionScope;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
import org.sonatype.plexus.build.incremental.BuildContext;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import lombok.extern.slf4j.Slf4j;

@Mojo(name = "generate" /** the goal */
        , threadSafe = false /** until proven otherwise, false */
        , defaultPhase = LifecyclePhase.PACKAGE, requiresDependencyResolution = ResolutionScope.RUNTIME, requiresProject = true)
@Slf4j
public class GenerateDependenciesLicenseInfoMojo extends AbstractMojo {

    @Parameter(property = "skip", defaultValue = "false")
    private boolean skip;

    @Parameter(defaultValue = "${project}", readonly = true)
    private MavenProject mavenProject;

    @Parameter(defaultValue = "${session}", readonly = true, required = true)
    private MavenSession session;

    @Component
    protected ProjectBuilder projectBuilder;

    // @Parameter(property = "localRepository", required = true, readonly =
    // true)
    // protected ArtifactRepository localRepository;

    @Component
    private BuildContext buildContext;

    private static ObjectMapper jsonMapper;

    static {
        jsonMapper = new ObjectMapper();
        jsonMapper.enable(SerializationFeature.INDENT_OUTPUT);
        jsonMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    }

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        if (skip) {
            log.info("Skipping execution due to 'skip' == true");
        } else {
            try {
                generateDependenciesLicenseInfo();
            } catch (ProjectBuildingException e) {
                log.error("", e);
                throw new MojoExecutionException(e.getMessage());
            }
        }
    }

    private void generateDependenciesLicenseInfo() throws ProjectBuildingException {
        Artifacts2LicensesRepository repo = new Artifacts2LicensesRepository();

        ProjectBuildingRequest request = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
        // Build the project and get the result

        List<Artifact> runtimeArtifacts = mavenProject.getRuntimeArtifacts();
        for (Artifact artifact : runtimeArtifacts) {
            MavenProject project = projectBuilder.build(artifact, request).getProject();
            List<String> licenses = project.getLicenses();
            log.info("licenses = {}", licenses);
            repo.add(artifact, project.getLicenses());
        }

    }

}