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
+
+