diff --git a/japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java b/japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java index ae525bd58..048ce3834 100644 --- a/japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java +++ b/japicmp-maven-plugin/src/main/java/japicmp/maven/JApiCmpMojo.java @@ -141,6 +141,11 @@ Optional executeWithParameters(PluginParameters pluginParameters, Mav getLog().warn("Skipping execution because no new version could be resolved/found."); return Optional.absent(); } + if (jarArchiveComparator.getJarArchiveComparatorOptions().getClassPathMode() == JarArchiveComparatorOptions.ClassPathMode.ONE_COMMON_CLASSPATH) { + getLog().debug("comparing " + options.getOldArchives() + " to " + options.getNewArchives() + " using " + jarArchiveComparator.getCommonClasspathAsString()); + } else { + getLog().debug("comparing " + options.getOldArchives() + " using " + jarArchiveComparator.getOldClassPathAsString() + " to " + options.getNewArchives() + " using " + jarArchiveComparator.getNewClassPathAsString()); + } List jApiClasses = jarArchiveComparator.compare(options.getOldArchives(), options.getNewArchives()); try { PostAnalysisScriptExecutor postAnalysisScriptExecutor = new PostAnalysisScriptExecutor(); @@ -593,7 +598,7 @@ private String createFilename(MavenParameters mavenParameters) { return sb.toString(); } - private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, PluginParameters pluginParameters, MavenParameters mavenParameters) throws MojoFailureException { + private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, PluginParameters pluginParameters, MavenParameters mavenParameters) throws MojoFailureException, MojoExecutionException { if (pluginParameters != null) { if (pluginParameters.getDependenciesParam() != null) { if (pluginParameters.getOldClassPathDependencies() != null || pluginParameters.getNewClassPathDependencies() != null) { @@ -636,23 +641,59 @@ private void setUpClassPath(JarArchiveComparatorOptions comparatorOptions, Plugi comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS); } else { if (getLog().isDebugEnabled()) { - getLog().debug("None of the elements , or found. Using " + JApiCli.ClassPathMode.ONE_COMMON_CLASSPATH); + getLog().debug("None of the elements , or found. Using " + JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS); } - comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.ONE_COMMON_CLASSPATH); + comparatorOptions.setClassPathMode(JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS); } } } setUpClassPathUsingMavenProject(comparatorOptions, mavenParameters, pluginParameters, ConfigurationVersion.NEW); } - 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."); + private void setUpClassPathUsingMavenProject(JarArchiveComparatorOptions comparatorOptions, MavenParameters mavenParameters, PluginParameters pluginParameters, ConfigurationVersion configurationVersion) throws MojoFailureException, MojoExecutionException { + if (comparatorOptions.getClassPathMode() == JarArchiveComparatorOptions.ClassPathMode.TWO_SEPARATE_CLASSPATHS) { + if (pluginParameters.getOldVersionParam() != null) { + Dependency dependency = pluginParameters.getOldVersionParam().getDependency(); + if (dependency != null) { + Set comparisonArtifacts = resolveArtifact(dependency, mavenParameters, false, pluginParameters, ConfigurationVersion.OLD); + if (!comparisonArtifacts.isEmpty()) { + setUpClassPathEntries(comparisonArtifacts.iterator().next(), mavenParameters, pluginParameters, comparatorOptions.getOldClassPath()); + } + } + } else if (pluginParameters.getOldVersionsParam() != null) { + // TODO + } else { + // TODO rather than calling getComparisonArtifact again, populateArchivesListsFromParameters should compute the old CP for various modes + Artifact comparisonArtifact = getComparisonArtifact(mavenParameters, pluginParameters, ConfigurationVersion.OLD); + if (comparisonArtifact.getVersion() != null) { + setUpClassPathEntries(comparisonArtifact, mavenParameters, pluginParameters, comparatorOptions.getOldClassPath()); + } + } + } + if (pluginParameters.getNewVersionParam() != null) { + Dependency dependency = pluginParameters.getNewVersionParam().getDependency(); + if (dependency != null) { + Set comparisonArtifacts = resolveArtifact(dependency, mavenParameters, false, pluginParameters, ConfigurationVersion.NEW); + if (!comparisonArtifacts.isEmpty()) { + setUpClassPathEntries(comparisonArtifacts.iterator().next(), mavenParameters, pluginParameters, comparatorOptions.getNewClassPath()); + } + } + } else if (pluginParameters.getNewVersionsParam() != null) { + // TODO + } else { + MavenProject mavenProject = mavenParameters.getMavenProject(); + notNull(mavenProject, "Maven parameter mavenProject should be provided by maven container."); + String packaging = mavenProject.getPackaging(); + packaging = mapPackaging(packaging, "bundle".equalsIgnoreCase(packaging), "jar"); + DefaultArtifact artifact = new DefaultArtifact(mavenProject.getGroupId(), mavenProject.getArtifactId(), packaging, mavenProject.getVersion()); + setUpClassPathEntries(artifact, mavenParameters, pluginParameters, comparatorOptions.getClassPathEntries()); + } + } + + private void setUpClassPathEntries(Artifact comparisonArtifact, MavenParameters mavenParameters, PluginParameters pluginParameters, List classPath) throws MojoFailureException { + getLog().debug("setting up classpath entries for " + comparisonArtifact); CollectRequest request = new CollectRequest(); - String packaging = mavenProject.getPackaging(); - packaging = mapPackaging(packaging, "bundle".equalsIgnoreCase(packaging), "jar"); - DefaultArtifact defaultArtifact = new DefaultArtifact(mavenProject.getGroupId(), mavenProject.getArtifactId(), packaging, mavenProject.getVersion()); - request.setRoot(new org.eclipse.aether.graph.Dependency(defaultArtifact, "compile")); + request.setRoot(new org.eclipse.aether.graph.Dependency(comparisonArtifact, "compile")); try { DependencyResult dependencyResult = mavenParameters.getRepoSystem().resolveDependencies(mavenParameters.getRepoSession(), new DependencyRequest( request, new DependencyFilter() { @@ -678,7 +719,7 @@ public boolean accept(final DependencyNode node, final List pare } } for (String classPathEntry : classPathEntries) { - comparatorOptions.getClassPathEntries().add(classPathEntry); + classPath.add(classPathEntry); } } catch (final DependencyResolutionException e) { throw new MojoFailureException(e.getMessage(), e); diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java index 9bf7a9741..e702d65e5 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public class InterfaceMethodAddedImpl implements InterfaceMethodAdded { } diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java index d49fd0dfe..7e8e6a5ce 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public class InterfaceMethodRemovedImpl implements InterfaceMethodRemoved { @Override diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java index 50fadf849..4c2354ba0 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public class SubclassAddsNewStaticField extends SuperclassWithSubclassAddsNewStaticField { } diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SuperclassChanged.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SuperclassChanged.java new file mode 100644 index 000000000..43ccf8fbf --- /dev/null +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v1/src/main/java/japicmp/test/service/SuperclassChanged.java @@ -0,0 +1,4 @@ +package japicmp.test.service; // v1 + +public class SuperclassChanged extends SuperclassV1 { +} diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java index 99469ea74..bf9f0277d 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodAddedImpl.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public class InterfaceMethodAddedImpl implements InterfaceMethodAdded { @Override diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java index bc281ebf8..fefa2fccf 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/InterfaceMethodRemovedImpl.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public class InterfaceMethodRemovedImpl implements InterfaceMethodRemoved { diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java index 8bbf038cc..94619e3d0 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SubclassAddsNewStaticField.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public class SubclassAddsNewStaticField extends SuperclassWithSubclassAddsNewStaticField { public static int field = 42; diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SuperclassChanged.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SuperclassChanged.java new file mode 100644 index 000000000..9ff6bc226 --- /dev/null +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-impl-v2/src/main/java/japicmp/test/service/SuperclassChanged.java @@ -0,0 +1,4 @@ +package japicmp.test.service; // v2 + +public class SuperclassChanged extends SuperclassV2 { +} diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/pom.xml b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/pom.xml index dc66ca7cc..57afd7715 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/pom.xml +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/pom.xml @@ -94,20 +94,6 @@ ${project.version} - - - com.github.siom79.japicmp - japicmp-test-service-v1 - ${project.version} - - - - - com.github.siom79.japicmp - japicmp-test-service-v2 - ${project.version} - - public true diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/src/test/java/japicmp/test/service/MavenPluginTestIT.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/src/test/java/japicmp/test/service/MavenPluginTestIT.java index f8502d47d..19c173ef7 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/src/test/java/japicmp/test/service/MavenPluginTestIT.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-test/src/test/java/japicmp/test/service/MavenPluginTestIT.java @@ -22,6 +22,9 @@ public void testTextOutput() throws IOException { Optional lineOptional = findLineThatContains(lines, "SubclassAddsNewStaticField"); assertThat(lineOptional.isPresent(), is(true)); assertThat(lineOptional.get().contains("***!"), is(true)); + lineOptional = findLineThatContains(lines, "SuperclassChanged"); + assertThat(lineOptional.isPresent(), is(true)); + assertThat(lineOptional.get().contains("***!"), is(true)); } private Optional findLineThatContains(List lines, String str) { diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodAdded.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodAdded.java index 28a34fe4f..f5c17077a 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodAdded.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodAdded.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public interface InterfaceMethodAdded { } diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java index 6040f2efb..17e062087 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public interface InterfaceMethodRemoved { void methodRemoved(); diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassV1.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassV1.java new file mode 100644 index 000000000..22037c400 --- /dev/null +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassV1.java @@ -0,0 +1,4 @@ +package japicmp.test.service; // v1 + +public class SuperclassV1 { +} diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java index 7021b9c51..fbdc9aef9 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v1/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v1 public class SuperclassWithSubclassAddsNewStaticField { public static final int field = 42; diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodAdded.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodAdded.java index 7617b3594..9f955032e 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodAdded.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodAdded.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public interface InterfaceMethodAdded { diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java index 95534810d..801102aac 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/InterfaceMethodRemoved.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public interface InterfaceMethodRemoved { } diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassV2.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassV2.java new file mode 100644 index 000000000..9d31198ed --- /dev/null +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassV2.java @@ -0,0 +1,4 @@ +package japicmp.test.service; // v2 + +public class SuperclassV2 { +} diff --git a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java index 7021b9c51..6ac8a79a9 100644 --- a/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java +++ b/japicmp-testbase/japicmp-test-service-impl-base/japicmp-test-service-v2/src/main/java/japicmp/test/service/SuperclassWithSubclassAddsNewStaticField.java @@ -1,4 +1,4 @@ -package japicmp.test.service; +package japicmp.test.service; // v2 public class SuperclassWithSubclassAddsNewStaticField { public static final int field = 42; diff --git a/japicmp/src/main/java/japicmp/cmp/JApiCmpArchive.java b/japicmp/src/main/java/japicmp/cmp/JApiCmpArchive.java index 5821058b1..b6490e1ed 100644 --- a/japicmp/src/main/java/japicmp/cmp/JApiCmpArchive.java +++ b/japicmp/src/main/java/japicmp/cmp/JApiCmpArchive.java @@ -20,4 +20,10 @@ public File getFile() { public Version getVersion() { return version; } + + @Override + public String toString() { + return file + "@" + version.getStringVersion(); + } + }