Skip to content

Commit bdf3ce2

Browse files
committed
Make the mojo define old & new classpaths automatically
1 parent 067bb62 commit bdf3ce2

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ private void populateArchivesListsFromParameters(PluginParameters pluginParamete
411411
throw new MojoFailureException(message);
412412
}
413413
}
414+
getLog().debug("oldArchives=" + oldArchives + " newArchives=" + newArchives);
414415
}
415416

416417
void breakBuildIfNecessary(List<JApiClass> jApiClasses, Parameter parameterParam, Options options, JarArchiveComparator jarArchiveComparator) throws MojoFailureException, MojoExecutionException {
@@ -657,6 +658,7 @@ private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, Plugi
657658
"separate classpath for the new and old version.");
658659
} else {
659660
if (getLog().isDebugEnabled()) {
661+
// TODO should perhaps still use TWO_SEPARATE_CLASSPATHS and add dependencies to both?
660662
getLog().debug("Element <dependencies/> found. Using " + JApiCli.ClassPathMode.ONE_COMMON_CLASSPATH);
661663
}
662664
for (Dependency dependency : pluginParameters.getDependenciesParam()) {
@@ -691,18 +693,41 @@ private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, Plugi
691693
comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS);
692694
} else {
693695
if (getLog().isDebugEnabled()) {
694-
getLog().debug("None of the elements <oldClassPathDependencies/>, <newClassPathDependencies/> or <dependencies/> found. Using " + JApiCli.ClassPathMode.ONE_COMMON_CLASSPATH);
696+
getLog().debug("None of the elements <oldClassPathDependencies/>, <newClassPathDependencies/> or <dependencies/> found. Using " + JApiCli.ClassPathMode.TWO_SEPARATE_CLASSPATHS);
695697
}
696-
comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.ONE_COMMON_CLASSPATH);
698+
comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS);
697699
}
698700
}
699701
}
700702
setUpClassPathUsingMavenProject(comparatorOptions, mavenParameters, pluginParameters, ConfigurationVersion.NEW);
703+
getLog().debug("mode=" + comparatorOptions.getClassPathMode() + " classPathEntries=" + comparatorOptions.getClassPathEntries() + " oldClassPath=" + comparatorOptions.getOldClassPath() + " newClassPath=" + comparatorOptions.getNewClassPath());
701704
}
702705

703706
private void setUpClassPathUsingMavenProject(JarArchiveComparatorOptions comparatorOptions, MavenParameters mavenParameters, PluginParameters pluginParameters, ConfigurationVersion configurationVersion) throws MojoFailureException {
707+
List<String> newClassPath;
708+
if (comparatorOptions.getClassPathMode() == JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS) {
709+
if (pluginParameters.getOldVersionParam() == null && pluginParameters.getOldVersionsParam() == null) {
710+
try {
711+
// TODO rather than calling getComparisonArtifact again, populateArchivesListsFromParameters should compute the old CP for various modes
712+
Artifact comparisonArtifact = getComparisonArtifact(mavenParameters, pluginParameters);
713+
if (comparisonArtifact.getVersion() != null) {
714+
Set<Artifact> artifacts = resolveArtifact(comparisonArtifact, mavenParameters, true, pluginParameters, ConfigurationVersion.OLD);
715+
setUpClassPathEntries(artifacts, comparatorOptions.getOldClassPath(), mavenParameters, pluginParameters, configurationVersion);
716+
}
717+
} catch (MojoExecutionException e) {
718+
throw new MojoFailureException("Computing and resolving comparison artifact failed: " + e.getMessage(), e);
719+
}
720+
}
721+
newClassPath = comparatorOptions.getNewClassPath();
722+
} else {
723+
newClassPath = comparatorOptions.getClassPathEntries();
724+
}
704725
notNull(mavenParameters.getMavenProject(), "Maven parameter mavenProject should be provided by maven container.");
705726
Set<Artifact> dependencyArtifacts = mavenParameters.getMavenProject().getArtifacts();
727+
setUpClassPathEntries(dependencyArtifacts, newClassPath, mavenParameters, pluginParameters, configurationVersion);
728+
}
729+
730+
private void setUpClassPathEntries(Set<Artifact> dependencyArtifacts, List<String> classPath, MavenParameters mavenParameters, PluginParameters pluginParameters, ConfigurationVersion configurationVersion) throws MojoFailureException {
706731
Set<String> classPathEntries = new HashSet<>();
707732
for (Artifact artifact : dependencyArtifacts) {
708733
String scope = artifact.getScope();
@@ -724,10 +749,8 @@ private void setUpClassPathUsingMavenProject(JarArchiveComparatorOptions compara
724749
}
725750
}
726751
}
727-
for (String classPathEntry : classPathEntries) {
728-
comparatorOptions.getClassPathEntries().add(classPathEntry);
729-
}
730-
}
752+
classPath.addAll(classPathEntries);
753+
}
731754

732755
private void handleMissingArtifactFile(PluginParameters pluginParameters, Artifact artifact) {
733756
if (artifact.isOptional()) {

japicmp/src/main/java/japicmp/cmp/JApiCmpArchive.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,10 @@ public File getFile() {
2020
public Version getVersion() {
2121
return version;
2222
}
23+
24+
@Override
25+
public String toString() {
26+
return file + "@" + version.getStringVersion();
27+
}
28+
2329
}

0 commit comments

Comments
 (0)