Skip to content

Commit

Permalink
Merge pull request #328 from cstamas/drop-maven-legacy-reuse-project
Browse files Browse the repository at this point in the history
Drop Maven legacy (and unused bits) and reuse work done by Maven
  • Loading branch information
siom79 committed Jun 27, 2022
2 parents 50d7845 + 69a40d5 commit 498fc20
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 72 deletions.
80 changes: 40 additions & 40 deletions japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
import japicmp.output.xml.XmlOutputGeneratorOptions;
import japicmp.util.Optional;
import japicmp.versioning.SemanticVersion;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecution;
Expand All @@ -35,9 +34,6 @@
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.*;

Expand Down Expand Up @@ -89,8 +85,6 @@ public class JApiCmpMojo extends AbstractMojo {
@org.apache.maven.plugins.annotations.Parameter(property = "project.build.directory", required = true)
private File projectBuildDir;
@Component
private ArtifactFactory artifactFactory;
@Component
private RepositorySystem repoSystem;
@org.apache.maven.plugins.annotations.Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
private RepositorySystemSession repoSession;
Expand All @@ -106,13 +100,11 @@ public class JApiCmpMojo extends AbstractMojo {
private MojoExecution mojoExecution;
@org.apache.maven.plugins.annotations.Parameter(defaultValue = "(,${project.version})", readonly = true)
private String versionRangeWithProjectVersion;
@Component
private ArtifactMetadataSource metadataSource;
private Options options;

public void execute() throws MojoExecutionException, MojoFailureException {
MavenParameters mavenParameters = new MavenParameters(this.artifactRepositories, this.artifactFactory, this.localRepository,
this.mavenProject, this.mojoExecution, this.versionRangeWithProjectVersion, this.metadataSource, this.repoSystem, this.repoSession,
MavenParameters mavenParameters = new MavenParameters(this.artifactRepositories, this.localRepository,
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, Optional.of(
this.projectBuildDir), Optional.<String>absent(), true, this.oldVersions, this.newVersions, this.oldClassPathDependencies,
Expand Down Expand Up @@ -669,41 +661,40 @@ private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, Plugi
private void setUpClassPathUsingMavenProject(JarArchiveComparatorOptions comparatorOptions, MavenParameters mavenParameters, PluginParameters pluginParameters, ConfigurationVersion configurationVersion) throws MojoFailureException {
MavenProject mavenProject = mavenParameters.getMavenProject();
notNull(mavenProject, "Maven parameter mavenProject should be provided by maven container.");
CollectRequest request = new CollectRequest();
DefaultArtifact defaultArtifact = createDefaultArtifact(mavenProject, mavenProject.getVersion());
request.setRoot(new org.eclipse.aether.graph.Dependency(defaultArtifact, "compile"));
try {
DependencyResult dependencyResult = mavenParameters.getRepoSystem().resolveDependencies(mavenParameters.getRepoSession(), new DependencyRequest(
request, new DependencyFilter() {
@Override
public boolean accept(final DependencyNode node, final List<DependencyNode> parents) {
return !"test".equalsIgnoreCase(node.getDependency().getScope());
}
}));
Set<String> classPathEntries = new HashSet<>();
for (ArtifactResult artifactResult : dependencyResult.getArtifactResults()) {
Artifact artifact = artifactResult.getArtifact();
File resolvedFile = artifact.getFile();
if (resolvedFile != null) {
String absolutePath = resolvedFile.getAbsolutePath();
if (!classPathEntries.contains(absolutePath)) {
if (getLog().isDebugEnabled()) {
getLog().debug("Adding to classpath: " + absolutePath);
}
classPathEntries.add(absolutePath);
Set<String> classPathEntries = new HashSet<>();
for (Artifact artifact : getCompileArtifacts(mavenProject)) {
File resolvedFile = artifact.getFile();
if (resolvedFile != null) {
String absolutePath = resolvedFile.getAbsolutePath();
if (classPathEntries.add(absolutePath)) {
if (getLog().isDebugEnabled()) {
getLog().debug("Adding to classpath: " + absolutePath);
}
} else {
handleMissingArtifactFile(pluginParameters, artifact);
}
} else {
handleMissingArtifactFile(pluginParameters, artifact);
}
for (String classPathEntry : classPathEntries) {
comparatorOptions.getClassPathEntries().add(classPathEntry);
}
comparatorOptions.getClassPathEntries().addAll(classPathEntries);
}

private Set<Artifact> getCompileArtifacts(final MavenProject mavenProject) {
Set<org.apache.maven.artifact.Artifact> projectDependencies = mavenProject.getArtifacts(); // dependencies that this project has, including transitive ones
HashSet<Artifact> result = new HashSet<>(1 + projectDependencies.size());
result.add(RepositoryUtils.toArtifact(mavenProject.getArtifact())); // distinguished: the project artifact
for (org.apache.maven.artifact.Artifact dep : projectDependencies) {
if (dep.getArtifactHandler().isAddedToClasspath()) {
if (org.apache.maven.artifact.Artifact.SCOPE_COMPILE.equals(dep.getScope())
|| org.apache.maven.artifact.Artifact.SCOPE_PROVIDED.equals(dep.getScope())
|| org.apache.maven.artifact.Artifact.SCOPE_SYSTEM.equals(dep.getScope())) {
result.add(RepositoryUtils.toArtifact(dep));
}
}
} catch (final DependencyResolutionException e) {
throw new MojoFailureException(e.getMessage(), e);
}
return result;
}


private void handleMissingArtifactFile(final PluginParameters pluginParameters, final Artifact artifact) {
if (pluginParameters.getParameterParam().isIgnoreMissingOptionalDependency()) {
getLog().info("Ignoring missing optional dependency: " + toDescriptor(artifact));
Expand Down Expand Up @@ -774,10 +765,19 @@ private List<JApiCmpArchive> resolveDependencyToFile(String parameterName, Depen
if (getLog().isDebugEnabled()) {
getLog().debug("Trying to resolve dependency '" + dependency + "' to file.");
}
MavenProject mavenProject = mavenParameters.getMavenProject();
if (dependency.getSystemPath() == null) {
String descriptor = dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion();
getLog().debug(parameterName + ": " + descriptor);
Set<Artifact> artifacts = resolveArtifact(dependency, mavenParameters, transitively, pluginParameters, configurationVersion);
String projectDescriptor = mavenProject.getGroupId() + ":" + mavenProject.getArtifactId() + ":" + mavenProject.getVersion();

Set<Artifact> artifacts;
if (descriptor.equals(projectDescriptor)) {
artifacts = getCompileArtifacts(mavenProject); // do not repeat what Maven already did for us
} else {
artifacts = resolveArtifact(dependency, mavenParameters, transitively, pluginParameters, configurationVersion);
}

for (Artifact artifact : artifacts) {
File file = artifact.getFile();
if (file != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import japicmp.config.Options;
import japicmp.output.xml.XmlOutput;
import japicmp.util.Optional;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.plugin.MojoExecution;
Expand Down Expand Up @@ -47,8 +45,6 @@ public class JApiCmpReport extends AbstractMavenReport {
@org.apache.maven.plugins.annotations.Parameter(required = true, readonly = true, property = "project.reporting.outputDirectory")
private String outputDirectory;
@Component
private ArtifactFactory artifactFactory;
@Component
private RepositorySystem repoSystem;
@org.apache.maven.plugins.annotations.Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
private RepositorySystemSession repoSession;
Expand All @@ -64,8 +60,6 @@ public class JApiCmpReport extends AbstractMavenReport {
private MojoExecution mojoExecution;
@org.apache.maven.plugins.annotations.Parameter(defaultValue = "(,${project.version})", readonly = true)
private String versionRangeWithProjectVersion;
@Component
private ArtifactMetadataSource metadataSource;
private JApiCmpMojo mojo;
private MavenParameters mavenParameters;
private PluginParameters pluginParameters;
Expand Down Expand Up @@ -108,8 +102,8 @@ private JApiCmpMojo getMojo() {
return this.mojo;
}
this.mojo = new JApiCmpMojo();
this.mavenParameters = new MavenParameters(this.artifactRepositories, this.artifactFactory, this.localRepository,
this.mavenProject, this.mojoExecution, this.versionRangeWithProjectVersion, this.metadataSource, this.repoSystem, this.repoSession,
this.mavenParameters = new MavenParameters(this.artifactRepositories, this.localRepository,
this.mavenProject, this.mojoExecution, this.versionRangeWithProjectVersion, this.repoSystem, this.repoSession,
this.remoteRepos);
this.pluginParameters = new PluginParameters(this.skip, this.newVersion, this.oldVersion, this.parameter, this.dependencies, Optional.<File>absent(), Optional.of(
this.outputDirectory), false, this.oldVersions, this.newVersions, this.oldClassPathDependencies, this.newClassPathDependencies);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package japicmp.maven;

import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.project.MavenProject;
Expand All @@ -13,39 +11,31 @@

public class MavenParameters {
private final List<ArtifactRepository> artifactRepositories;
private final ArtifactFactory artifactFactory;
private final ArtifactRepository localRepository;
private final MavenProject mavenProject;
private final MojoExecution mojoExecution;
private final String versionRangeWithProjectVersion;
private final ArtifactMetadataSource metadataSource;
private final RepositorySystem repoSystem;
private final RepositorySystemSession repoSession;
private final List<RemoteRepository> remoteRepos;
public MavenParameters(List<ArtifactRepository> artifactRepositories, ArtifactFactory artifactFactory, ArtifactRepository localRepository,
MavenProject mavenProject, MojoExecution mojoExecution, String versionRangeWithProjectVersion, ArtifactMetadataSource metadataSource,

public MavenParameters(final List<ArtifactRepository> artifactRepositories, final ArtifactRepository localRepository,
final MavenProject mavenProject, final MojoExecution mojoExecution, final String versionRangeWithProjectVersion,
final RepositorySystem repoSystem, final RepositorySystemSession repoSession, final List<RemoteRepository> remoteRepos) {
this.artifactRepositories = artifactRepositories;
this.artifactFactory = artifactFactory;
this.localRepository = localRepository;
this.mavenProject = mavenProject;
this.mojoExecution = mojoExecution;
this.versionRangeWithProjectVersion = versionRangeWithProjectVersion;
this.metadataSource = metadataSource;
this.repoSystem = repoSystem;
this.repoSession = repoSession;
this.remoteRepos = remoteRepos;
}

public List<ArtifactRepository> getArtifactRepositories() {
return artifactRepositories;
}

public ArtifactFactory getArtifactFactory() {
return artifactFactory;
}

public ArtifactRepository getLocalRepository() {
return localRepository;
}
Expand All @@ -62,18 +52,14 @@ public String getVersionRangeWithProjectVersion() {
return versionRangeWithProjectVersion;
}

public ArtifactMetadataSource getMetadataSource() {
return metadataSource;
}

public RepositorySystem getRepoSystem() {
return this.repoSystem;
}

public RepositorySystemSession getRepoSession() {
return this.repoSession;
}

public List<RemoteRepository> getRemoteRepos() {
return this.remoteRepos;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package japicmp.maven;

import japicmp.util.Optional;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.logging.Log;
Expand Down Expand Up @@ -93,8 +91,8 @@ public void testMavenProjectNameIsNotAvailable() {

private MavenParameters createMavenParameters() {
RemoteRepository remoteRepository = new RemoteRepository.Builder("id", "type", "http://example.org").build();
return new MavenParameters(new ArrayList<ArtifactRepository>(), mock(ArtifactFactory.class), mock(ArtifactRepository.class),
new MavenProject(), mock(MojoExecution.class), "", mock(ArtifactMetadataSource.class), mock(RepositorySystem.class), mock(
return new MavenParameters(new ArrayList<ArtifactRepository>(), mock(ArtifactRepository.class),
new MavenProject(), mock(MojoExecution.class), "", mock(RepositorySystem.class), mock(
RepositorySystemSession.class), Collections.singletonList(remoteRepository));
}

Expand Down

0 comments on commit 498fc20

Please sign in to comment.