From 12e5c263d459b65024dbebbcf3bf5a7b14bcb071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Rohde=20D=C3=B8ssing?= Date: Sat, 12 Oct 2019 18:34:20 +0200 Subject: [PATCH 1/3] [MNG-6759] - Add test demonstrating the issue where the wrong repositories are used for resolving transitive dependencies --- ...9TransitiveDependencyRepositoriesTest.java | 64 +++++++++++++++++ .../dependency-in-custom-repo/pom.xml | 19 +++++ .../module1/pom.xml | 18 +++++ .../module2/pom.xml | 25 +++++++ .../pom.xml | 32 +++++++++ .../pom.xml | 70 +++++++++++++++++++ .../maven/its/mng6759/plugin/TestMojo.java | 66 +++++++++++++++++ 7 files changed, 294 insertions(+) create mode 100644 core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java create mode 100644 core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/dependency-in-custom-repo/pom.xml create mode 100644 core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module1/pom.xml create mode 100644 core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module2/pom.xml create mode 100644 core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/pom.xml create mode 100644 core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/pom.xml create mode 100644 core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/src/main/java/org/apache/maven/its/mng6759/plugin/TestMojo.java diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java new file mode 100644 index 000000000..3ef06e756 --- /dev/null +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java @@ -0,0 +1,64 @@ +package org.apache.maven.it; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.net.URI; +import org.apache.maven.it.util.ResourceExtractor; + +/** + * This is a test for MNG-6759. + */ +public class MavenITmng6759TransitiveDependencyRepositoriesTest extends AbstractMavenIntegrationTestCase { + + private final String projectBaseDir = "/mng-6759-transitive-dependency-repositories"; + + public MavenITmng6759TransitiveDependencyRepositoriesTest() { + super( "(,3.6.1],[3.6.3,)" ); + } + + /** + * Verifies that a project with a dependency graph like A -> B -> C, + * where C is in a non-Central repository should use B's {@literal } to resolve C. + */ + public void testTransitiveDependenciesAccountForRepositoriesListedByDependencyTrailPredecessor() throws Exception { + URI customRepoUri = installDependencyCInCustomRepo(); + File testDir = ResourceExtractor.simpleExtractResources( getClass(), projectBaseDir ); + + Verifier verifier = newVerifier( testDir.getAbsolutePath() ); + + verifier.addCliOption( "-Dcustom.repo.uri=" + customRepoUri ); + verifier.executeGoal( "package" ); + verifier.verifyErrorFreeLog(); + } + + private URI installDependencyCInCustomRepo() throws Exception { + File dependencyCProjectDir = ResourceExtractor.simpleExtractResources( getClass(), projectBaseDir + "/dependency-in-custom-repo" ); + URI customRepoUri = new File(new File(dependencyCProjectDir, "target" ), "repo" ).toURI(); + Verifier verifier = newVerifier( dependencyCProjectDir.getAbsolutePath() ); + + verifier.deleteDirectory( "target" ); + verifier.addCliOption( "-DaltDeploymentRepository=customRepo::default::" + customRepoUri ); + verifier.executeGoal( "deploy" ); + verifier.verifyErrorFreeLog(); + return customRepoUri; + } + +} diff --git a/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/dependency-in-custom-repo/pom.xml b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/dependency-in-custom-repo/pom.xml new file mode 100644 index 000000000..2089f05c9 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/dependency-in-custom-repo/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + mng-6759-transitive-dependency-repositories + dependency-in-custom-repo + 1.0 + jar + + + + org.apache.maven.plugins + maven-install-plugin + + true + + + + + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module1/pom.xml b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module1/pom.xml new file mode 100644 index 000000000..3c655d760 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module1/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + mng-6759-transitive-dependency-repositories + parent + 1.0 + + module1 + + + + mng-6759-transitive-dependency-repositories + module2 + ${project.version} + + + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module2/pom.xml b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module2/pom.xml new file mode 100644 index 000000000..c0c304117 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/module2/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + mng-6759-transitive-dependency-repositories + parent + 1.0 + + module2 + + + + customRepo + ${custom.repo.uri} + + + + + + mng-6759-transitive-dependency-repositories + dependency-in-custom-repo + 1.0 + + + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/pom.xml b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/pom.xml new file mode 100644 index 000000000..e75beb705 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-6759-transitive-dependency-repositories/pom.xml @@ -0,0 +1,32 @@ + + + + 4.0.0 + mng-6759-transitive-dependency-repositories + parent + 1.0 + pom + + + module1 + module2 + + + + + + + org.apache.maven.its.plugins + mng-6759-resolves-project-dependencies-plugin + 2.1-SNAPSHOT + + + + resolve + + + + + + + \ No newline at end of file diff --git a/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/pom.xml b/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/pom.xml new file mode 100644 index 000000000..ff055d838 --- /dev/null +++ b/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/pom.xml @@ -0,0 +1,70 @@ + + + + + + 4.0.0 + + + maven-it-plugins + org.apache.maven.its.plugins + 2.1-SNAPSHOT + + + mng-6759-resolves-project-dependencies-plugin + maven-plugin + + + 3.0 + + + Maven IT Plugin :: mng-6759 plugin + + + + org.apache.maven.shared + maven-artifact-resolver + 1.0 + + + org.apache.maven + maven-plugin-api + ${maven-version} + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + provided + + + org.apache.maven + maven-core + ${maven-version} + + + org.apache.maven + maven-model + ${maven-version} + provided + + + diff --git a/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/src/main/java/org/apache/maven/its/mng6759/plugin/TestMojo.java b/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/src/main/java/org/apache/maven/its/mng6759/plugin/TestMojo.java new file mode 100644 index 000000000..bda47854d --- /dev/null +++ b/core-it-support/core-it-plugins/mng6759-plugin-resolves-project-dependencies/src/main/java/org/apache/maven/its/mng6759/plugin/TestMojo.java @@ -0,0 +1,66 @@ +package org.apache.maven.its.mng6759.plugin; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Arrays; +import org.apache.maven.ProjectDependenciesResolver; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +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.project.MavenProject; + +/** + * Resolves the project dependency tree + */ +@Mojo( name = "resolve", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true ) +public class TestMojo + extends AbstractMojo +{ + + @Parameter( defaultValue = "${project}", readonly = true, required = true ) + private MavenProject project; + + @Parameter( defaultValue = "${session}", readonly = true, required = true ) + private MavenSession mavenSession; + + @Component( hint = "default" ) + protected ProjectDependenciesResolver dependencyResolver; + + public void execute() + throws MojoExecutionException + { + + try + { + dependencyResolver.resolve( project, Arrays.asList( "test" ), mavenSession ); + } + catch ( ArtifactResolutionException | ArtifactNotFoundException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + + } +} From e49d50e8d30b635044c7aa129aadfb16e8434e77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Rohde=20D=C3=B8ssing?= Date: Tue, 22 Oct 2019 17:38:16 +0200 Subject: [PATCH 2/3] Address review comments --- .../src/test/java/org/apache/maven/it/IntegrationTestSuite.java | 1 + .../it/MavenITmng6759TransitiveDependencyRepositoriesTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java index 0f262e83e..6d61985a2 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java @@ -107,6 +107,7 @@ public static Test suite() // ------------------------------------------------------------------------------------------------------------- // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137 + suite.addTestSuite( MavenITmng6759TransitiveDependencyRepositoriesTest.class ); suite.addTestSuite( MavenITmng6720FailFastTest.class ); suite.addTestSuite( MavenITmng6506PackageAnnotationTest.class ); suite.addTestSuite( MavenITmng6256SpecialCharsAlternatePOMLocation.class ); diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java index 3ef06e756..cba4e330c 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6759TransitiveDependencyRepositoriesTest.java @@ -31,7 +31,7 @@ public class MavenITmng6759TransitiveDependencyRepositoriesTest extends Abstract private final String projectBaseDir = "/mng-6759-transitive-dependency-repositories"; public MavenITmng6759TransitiveDependencyRepositoriesTest() { - super( "(,3.6.1],[3.6.3,)" ); + super( "(,3.6.2),(3.6.2,)" ); } /** From 2c1506f5ebdf659a980d381f8ea41dee14116d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Rohde=20D=C3=B8ssing?= Date: Wed, 23 Oct 2019 23:53:21 +0200 Subject: [PATCH 3/3] Add test plugin to parent project module list --- core-it-support/core-it-plugins/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core-it-support/core-it-plugins/pom.xml b/core-it-support/core-it-plugins/pom.xml index c301aae24..56ecce2f9 100644 --- a/core-it-support/core-it-plugins/pom.xml +++ b/core-it-support/core-it-plugins/pom.xml @@ -83,6 +83,7 @@ under the License. mng5805-plugin mng5805-plugin-dep mng5958-extension + mng-6759-resolves-project-dependencies-plugin