JApiCmpMojo.java
package japicmp.maven;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.*;
import org.apache.maven.project.MavenProject;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.RemoteRepository;
import java.io.File;
import java.util.List;
@Mojo(name = "cmp", requiresDependencyResolution = ResolutionScope.COMPILE,
defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
public class JApiCmpMojo extends AbstractMojo {
@Parameter
Version oldVersion;
@Parameter
List<DependencyDescriptor> oldVersions;
@Parameter
Version newVersion;
@Parameter
List<DependencyDescriptor> newVersions;
@Parameter
ConfigParameters parameter = new ConfigParameters();
@Parameter
List<Dependency> dependencies;
@Parameter
List<Dependency> oldClassPathDependencies;
@Parameter
List<Dependency> newClassPathDependencies;
@Parameter(property = "japicmp.skip", defaultValue = "false")
boolean skip;
@Parameter(property = "japicmp.skipDiffReport")
boolean skipDiffReport;
@Parameter(property = "japicmp.skipMarkdownReport")
boolean skipMarkdownReport;
@Parameter(property = "japicmp.skipXmlReport")
boolean skipXmlReport;
@Parameter(property = "japicmp.skipHtmlReport")
boolean skipHtmlReport;
@Parameter(property = "japicmp.breakBuildOnModifications")
boolean breakBuildOnModifications;
@Parameter(property = "japicmp.breakBuildOnBinaryIncompatibleModifications")
boolean breakBuildOnBinaryIncompatibleModifications;
@Parameter(property = "japicmp.breakBuildOnSourceIncompatibleModifications")
boolean breakBuildOnSourceIncompatibleModifications;
@Parameter(property = "japicmp.breakBuildBasedOnSemanticVersioning")
boolean breakBuildBasedOnSemanticVersioning;
@Parameter(property = "japicmp.breakBuildBasedOnSemanticVersioningForMajorVersionZero")
boolean breakBuildBasedOnSemanticVersioningForMajorVersionZero;
@Parameter
File outputDirectory;
@Parameter(readonly = true, defaultValue = "(,${project.version})")
String versionRangeWithProjectVersion;
@Parameter(required = true, property = "project.build.directory")
File projectBuildDir;
@Parameter(defaultValue = "${project}", readonly = true)
MavenProject mavenProject;
@Parameter(defaultValue = "${mojoExecution}", readonly = true)
MojoExecution mojoExecution;
@Component
RepositorySystem repoSystem;
@Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
RepositorySystemSession repoSession;
@Parameter(defaultValue = "${project.remoteProjectRepositories}", readonly = true)
List<RemoteRepository> remoteRepos;
@Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true)
List<ArtifactRepository> artifactRepositories;
JApiCmpProcessor processor;
public JApiCmpMojo() {
/* Intentionally left blank. */
}
public void execute() throws MojoExecutionException, MojoFailureException {
MavenParameters mavenParameters = new MavenParameters(this.artifactRepositories,
this.mavenProject, this.mojoExecution,
this.versionRangeWithProjectVersion,
this.repoSystem, this.repoSession,
this.remoteRepos);
PluginParameters pluginParameters = new PluginParameters(this.skip,
this.newVersion,
this.oldVersion, this.parameter,
this.dependencies,
this.projectBuildDir,
this.outputDirectory, true,
this.oldVersions, this.newVersions,
this.oldClassPathDependencies,
this.newClassPathDependencies,
new SkipReport(
this.skipDiffReport,
this.skipHtmlReport,
this.skipMarkdownReport,
this.skipXmlReport),
new BreakBuild(
this.breakBuildBasedOnSemanticVersioning,
this.breakBuildBasedOnSemanticVersioningForMajorVersionZero,
this.breakBuildOnBinaryIncompatibleModifications,
this.breakBuildOnSourceIncompatibleModifications,
this.breakBuildOnModifications));
processor = new JApiCmpProcessor(pluginParameters, mavenParameters, getLog());
processor.execute();
}
}