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 new file mode 100644 index 000000000..cba4e330c --- /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.2),(3.6.2,)" ); + } + + /** + * 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 ); + } + + } +} 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