diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMergeTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMergeTest.java index 34810b4b3..e9af6ab68 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMergeTest.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMergeTest.java @@ -29,6 +29,7 @@ * This is a test set for MNG-4720. * * @author Benjamin Bentmann + * @author Ddiier Loiseau */ public class MavenITmng4720DependencyManagementExclusionMergeTest extends AbstractMavenIntegrationTestCase { @@ -39,11 +40,13 @@ public MavenITmng4720DependencyManagementExclusionMergeTest() { /** * Verify the effective exclusions applied during transitive dependency resolution when both the regular * dependency section and dependency management declare exclusions for a particular dependency. + *

+ * By default, the dependency management of transitive dependencies is now taken into account. * * @throws Exception in case of failure */ @Test - public void testit() throws Exception { + public void testitWithTransitiveDependencyManager() throws Exception { File testDir = ResourceExtractor.simpleExtractResources(getClass(), "/mng-4720"); Verifier verifier = newVerifier(testDir.getAbsolutePath()); @@ -63,7 +66,45 @@ public void testit() throws Exception { assertFalse(classpath.toString(), classpath.contains("b-0.1.jar")); - // should better have been excluded as well, now it's a matter of backward-compat + // dependency management in a excludes d + if (matchesVersionRange("[4.0.0-beta-5,)")) { + assertFalse(classpath.toString(), classpath.contains("d-0.1.jar")); + } else { + assertTrue(classpath.toString(), classpath.contains("d-0.1.jar")); + } + } + + /** + * Verify the effective exclusions applied during transitive dependency resolution when both the regular + * dependency section and dependency management declare exclusions for a particular dependency. + *

+ * This tests the same behaviour with dependency manager transitivity disabled. + * + * @throws Exception in case of failure + */ + @Test + public void testitWithTransitiveDependencyManagerDisabled() throws Exception { + File testDir = ResourceExtractor.simpleExtractResources(getClass(), "/mng-4720"); + + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.setAutoclean(false); + verifier.deleteArtifacts("org.apache.maven.its.mng4720"); + verifier.addCliArgument("-s"); + verifier.addCliArgument("settings.xml"); + verifier.filterFile("settings-template.xml", "settings.xml", "UTF-8"); + verifier.addCliArgument("-Dmaven.resolver.dependencyManagerTransitivity=false"); + verifier.addCliArgument("validate"); + verifier.execute(); + verifier.verifyErrorFreeLog(); + + List classpath = verifier.loadLines("target/classpath.txt", "UTF-8"); + + assertTrue(classpath.toString(), classpath.contains("a-0.1.jar")); + assertTrue(classpath.toString(), classpath.contains("c-0.1.jar")); + + assertFalse(classpath.toString(), classpath.contains("b-0.1.jar")); + + // backward-compat: dependency management is ignored except in root pom assertTrue(classpath.toString(), classpath.contains("d-0.1.jar")); } } diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7982DependencyManagementTransitivityTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7982DependencyManagementTransitivityTest.java new file mode 100644 index 000000000..f88712b5e --- /dev/null +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng7982DependencyManagementTransitivityTest.java @@ -0,0 +1,129 @@ +/* + * 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. + */ +package org.apache.maven.it; + +import java.io.File; +import java.util.List; + +import org.apache.maven.shared.verifier.Verifier; +import org.apache.maven.shared.verifier.util.ResourceExtractor; +import org.junit.jupiter.api.Test; + +/** + * This is a test set for MNG-7982. + * + * @author Didier Loiseau + */ +public class MavenITmng7982DependencyManagementTransitivityTest extends AbstractMavenIntegrationTestCase { + + public MavenITmng7982DependencyManagementTransitivityTest() { + super("[4.0.0-beta-5,)"); + } + + /** + * Verify the effective dependency versions determined when using the transitive dependency management (default). + *

+ * By default, the dependency management of transitive dependencies should be taken into account. + * + * @throws Exception in case of failure + */ + @Test + public void testitWithTransitiveDependencyManager() throws Exception { + File testDir = + ResourceExtractor.simpleExtractResources(getClass(), "/mng-7982-transitive-dependency-management"); + + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.deleteArtifacts("org.apache.maven.its.mng7982"); + verifier.addCliArgument("-s"); + verifier.addCliArgument("settings.xml"); + verifier.filterFile("settings-template.xml", "settings.xml", "UTF-8"); + verifier.addCliArgument("verify"); + verifier.execute(); + verifier.verifyErrorFreeLog(); + + List bClasspath = verifier.loadLines("b/target/classpath.txt", "UTF-8"); + assertTrue(bClasspath.toString(), bClasspath.contains("a-1.jar")); + assertFalse(bClasspath.toString(), bClasspath.contains("a-2.jar")); + + List cClasspath = verifier.loadLines("c/target/classpath.txt", "UTF-8"); + assertTrue(cClasspath.toString(), cClasspath.contains("b-1.jar")); + assertFalse(cClasspath.toString(), cClasspath.contains("a-1.jar")); + assertTrue(cClasspath.toString(), cClasspath.contains("a-2.jar")); + + List dClasspath = verifier.loadLines("d/target/classpath.txt", "UTF-8"); + assertTrue(dClasspath.toString(), dClasspath.contains("c-1.jar")); + assertTrue(dClasspath.toString(), dClasspath.contains("b-1.jar")); + assertFalse(dClasspath.toString(), dClasspath.contains("a-1.jar")); + assertTrue(dClasspath.toString(), dClasspath.contains("a-2.jar")); + + List eClasspath = verifier.loadLines("e/target/classpath.txt", "UTF-8"); + assertTrue(eClasspath.toString(), eClasspath.contains("d-1.jar")); + assertTrue(eClasspath.toString(), eClasspath.contains("c-1.jar")); + assertTrue(eClasspath.toString(), eClasspath.contains("b-1.jar")); + assertFalse(eClasspath.toString(), eClasspath.contains("a-1.jar")); + assertTrue(eClasspath.toString(), eClasspath.contains("a-2.jar")); + } + + /** + * Verify the effective dependency versions determined when disabling the transitive dependency management (Maven 2/3 behavior). + *

+ * When transitivity is disabled, the dependency management of transitive dependencies should is ignored. + * + * @throws Exception in case of failure + */ + @Test + public void testitWithTransitiveDependencyManagerDisabled() throws Exception { + File testDir = + ResourceExtractor.simpleExtractResources(getClass(), "/mng-7982-transitive-dependency-management"); + + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.deleteArtifacts("org.apache.maven.its.mng7982"); + verifier.addCliArgument("-s"); + verifier.addCliArgument("settings.xml"); + verifier.filterFile("settings-template.xml", "settings.xml", "UTF-8"); + verifier.addCliArgument("verify"); + verifier.addCliArgument("-Dmaven.resolver.dependencyManagerTransitivity=false"); + verifier.execute(); + verifier.verifyErrorFreeLog(); + + List bClasspath = verifier.loadLines("b/target/classpath.txt", "UTF-8"); + assertTrue(bClasspath.toString(), bClasspath.contains("a-1.jar")); + assertFalse(bClasspath.toString(), bClasspath.contains("a-2.jar")); + + List cClasspath = verifier.loadLines("c/target/classpath.txt", "UTF-8"); + assertTrue(cClasspath.toString(), cClasspath.contains("b-1.jar")); + assertFalse(cClasspath.toString(), cClasspath.contains("a-1.jar")); + assertTrue(cClasspath.toString(), cClasspath.contains("a-2.jar")); + + List dClasspath = verifier.loadLines("d/target/classpath.txt", "UTF-8"); + assertTrue(dClasspath.toString(), dClasspath.contains("c-1.jar")); + assertTrue(dClasspath.toString(), dClasspath.contains("b-1.jar")); + // dependency management of c is ignored + assertTrue(dClasspath.toString(), dClasspath.contains("a-1.jar")); + assertFalse(dClasspath.toString(), dClasspath.contains("a-2.jar")); + + List eClasspath = verifier.loadLines("e/target/classpath.txt", "UTF-8"); + assertTrue(eClasspath.toString(), eClasspath.contains("d-1.jar")); + assertTrue(eClasspath.toString(), eClasspath.contains("c-1.jar")); + assertTrue(eClasspath.toString(), eClasspath.contains("b-1.jar")); + // dependency management of c is ignored + assertTrue(dClasspath.toString(), dClasspath.contains("a-1.jar")); + assertFalse(dClasspath.toString(), dClasspath.contains("a-2.jar")); + } +} diff --git a/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java b/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java index 021521519..c9cca4cf5 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java @@ -120,6 +120,7 @@ public TestSuiteOrdering() { * the tests are to finishing. Newer tests are also more likely to fail, so this is * a fail fast technique as well. */ + suite.addTestSuite(MavenITmng7982DependencyManagementTransitivityTest.class); suite.addTestSuite(MavenITmng8294ParentChecksTest.class); suite.addTestSuite(MavenITmng8293BomImportFromReactor.class); suite.addTestSuite(MavenITmng8288NoRootPomTest.class); diff --git a/core-it-suite/src/test/resources-filtered/bootstrap.txt b/core-it-suite/src/test/resources-filtered/bootstrap.txt index 3dc9e2335..b2542cf9a 100644 --- a/core-it-suite/src/test/resources-filtered/bootstrap.txt +++ b/core-it-suite/src/test/resources-filtered/bootstrap.txt @@ -5,6 +5,8 @@ #4 mv bootstrap.txt tmp.txt && cat tmp.txt | sort -u > bootstrap.txt && rm tmp.txt #5 com.google.code.findbugs:jsr305:1.3.9 +com.google.errorprone:error_prone_annotations:2.16 +com.google.errorprone:error_prone_annotations:2.19.1 com.google.guava:guava:10.0.1 com.google.guava:guava:16.0.1 com.thoughtworks.qdox:qdox:2.0-M9 @@ -96,6 +98,7 @@ org.apache.maven.plugins:maven-ear-plugin:${stubPluginVersion} org.apache.maven.plugins:maven-ear-plugin:3.2.0 org.apache.maven.plugins:maven-ejb-plugin:${stubPluginVersion} org.apache.maven.plugins:maven-ejb-plugin:3.1.0 +org.apache.maven.plugins:maven-enforcer-plugin:3.0.0 org.apache.maven.plugins:maven-help-plugin:3.3.0 org.apache.maven.plugins:maven-install-plugin:${stubPluginVersion} org.apache.maven.plugins:maven-install-plugin:3.0.1 @@ -110,6 +113,7 @@ org.apache.maven.plugins:maven-plugin-plugin:3.6.0 org.apache.maven.plugins:maven-plugin-plugin:3.9.0 org.apache.maven.plugins:maven-rar-plugin:${stubPluginVersion} org.apache.maven.plugins:maven-release-plugin:3.0.0-M5 +org.apache.maven.plugins:maven-remote-resources-plugin:1.7.0 org.apache.maven.plugins:maven-resources-plugin:${stubPluginVersion} org.apache.maven.plugins:maven-resources-plugin:3.2.0 org.apache.maven.plugins:maven-resources-plugin:3.3.0 @@ -151,6 +155,8 @@ org.apache.maven:maven-script-ant:2.1.0 org.apache.maven:maven-settings-builder:3.1.1 org.apache.maven:maven-settings:3.1.1 org.apache.maven.plugin-testing:maven-plugin-testing-harness:3.3.0 +org.checkerframework:checker-qual:3.21.2 +org.checkerframework:checker-qual:3.35.0 org.codehaus.gmavenplus:gmavenplus-plugin:1.11.0 org.codehaus.modello:modello-maven-plugin:2.1.1 org.codehaus.mojo:build-helper-maven-plugin:3.2.0 diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/b/pom.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/b/pom.xml new file mode 100644 index 000000000..365ddc94c --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/b/pom.xml @@ -0,0 +1,36 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + b + 1 + + + + org.apache.maven.its.mng7982 + a + 1 + + + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/c/pom.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/c/pom.xml new file mode 100644 index 000000000..c86e26b28 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/c/pom.xml @@ -0,0 +1,45 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + c + 1 + + + + + org.apache.maven.its.mng7982 + a + 2 + + + + + + org.apache.maven.its.mng7982 + b + 1 + + + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/d/pom.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/d/pom.xml new file mode 100644 index 000000000..d17a26c65 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/d/pom.xml @@ -0,0 +1,36 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + d + 1 + + + + org.apache.maven.its.mng7982 + c + 1 + + + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/e/pom.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/e/pom.xml new file mode 100644 index 000000000..f7b3c7c6c --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/e/pom.xml @@ -0,0 +1,36 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + e + 1 + + + + org.apache.maven.its.mng7982 + d + 1 + + + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/pom.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/pom.xml new file mode 100644 index 000000000..79c3d253e --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/pom.xml @@ -0,0 +1,54 @@ + + + + 4.1.0 + + org.apache.maven.its.mng7982 + test + 0.1 + pom + + Maven Integration Test :: MNG-7982 + Verify that the effective versions selected during transitive dependency resolution + are those coming from the dependency management of the transitive dependencies. + + + + + org.apache.maven.its.plugins + maven-it-plugin-dependency-resolution + 2.1-SNAPSHOT + + target/classpath.txt + 1 + + + + resolve + + compile + + validate + + + + + + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/.gitattributes b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/.gitattributes new file mode 100644 index 000000000..e3bce59d1 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/.gitattributes @@ -0,0 +1,3 @@ +*.pom text eol=lf +maven-metadata.xml text eol=lf + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1-build.pom b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1-build.pom new file mode 100644 index 000000000..214648ad7 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1-build.pom @@ -0,0 +1,29 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + a + 1 + a1 + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.jar b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.jar new file mode 100644 index 000000000..33ca4acb2 Binary files /dev/null and b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.jar differ diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.pom b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.pom new file mode 100644 index 000000000..fe04656bd --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/1/a-1.pom @@ -0,0 +1,10 @@ + + + 4.0.0 + org.apache.maven.its.mng7982 + a + 1 + a1 + Verify that the effective versions selected during transitive dependency resolution + are those coming from the dependency management of the transitive dependencies. + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2-build.pom b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2-build.pom new file mode 100644 index 000000000..c2ef62ce0 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2-build.pom @@ -0,0 +1,29 @@ + + + + 4.1.0 + + + + org.apache.maven.its.mng7982 + a + 2 + a2 + diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.jar b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.jar new file mode 100644 index 000000000..9d0f0a433 Binary files /dev/null and b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.jar differ diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.pom b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.pom new file mode 100644 index 000000000..ec85447f9 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/2/a-2.pom @@ -0,0 +1,10 @@ + + + 4.0.0 + org.apache.maven.its.mng7982 + a + 2 + a2 + Verify that the effective versions selected during transitive dependency resolution + are those coming from the dependency management of the transitive dependencies. + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/maven-metadata.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/maven-metadata.xml new file mode 100644 index 000000000..def664a0b --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/repo/org/apache/maven/its/mng7982/a/maven-metadata.xml @@ -0,0 +1,13 @@ + + + org.apache.maven.its.mng7982 + a + + 1 + + 2 + 1 + + 20241006201419 + + \ No newline at end of file diff --git a/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/settings-template.xml b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/settings-template.xml new file mode 100644 index 000000000..c985d1a68 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-7982-transitive-dependency-management/settings-template.xml @@ -0,0 +1,43 @@ + + + + + + + + maven-core-it-repo + + + maven-core-it + @baseurl@/repo + + ignore + + + false + + + + + + + maven-core-it-repo + +