You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2026/10/19 13:37:48 UTC

(maven-dependency-plugin) 01/04: [MDEP-631] Include provided and test dependencies when purging

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git

commit 8cc5d386c53b13ea51ebf1ca8dafd9b4ff13febc
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Tue Oct 13 22:50:14 2026 +0200

    [MDEP-631] Include provided and test dependencies when purging
    
    The collect root was a Dependency, so the session's DependencySelector treated the project's direct dependencies as transitive and dropped provided and test ones. Only PurgeLocalRepositoryMojo calls the five-argument overload; GoOfflineMojo uses the four-argument one, which already sets a root artifact.
---
 src/it/projects/purge-local-repository/verify.groovy             | 6 +++---
 .../org/apache/maven/plugins/dependency/utils/ResolverUtil.java  | 6 ++++--
 .../apache/maven/plugins/dependency/utils/ResolverUtilTest.java  | 9 +++------
 3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/it/projects/purge-local-repository/verify.groovy b/src/it/projects/purge-local-repository/verify.groovy
index 6ffc8f1f..6895f8e2 100644
--- a/src/it/projects/purge-local-repository/verify.groovy
+++ b/src/it/projects/purge-local-repository/verify.groovy
@@ -30,10 +30,10 @@ void checkFilePresence( String path )
 }
 
 checkFileAbsence( "org/apache/maven/its/dependency/purged/1.0/purged-1.0.jar" )
-checkFilePresence( "org/apache/maven/its/dependency/not-purged-test/1.0/not-purged-test-1.0.jar" )
-checkFilePresence( "org/apache/maven/its/dependency/not-purged-provided/1.0/not-purged-provided-1.0.jar" )
+checkFileAbsence( "org/apache/maven/its/dependency/not-purged-test/1.0/not-purged-test-1.0.jar" )
+checkFileAbsence( "org/apache/maven/its/dependency/not-purged-provided/1.0/not-purged-provided-1.0.jar" )
 checkFilePresence( "org/apache/maven/its/dependency/not-purged-optional/1.0/not-purged-optional-1.0.jar" )
 
 String buildLog = new File( basedir, "build.log" ).getText( "UTF-8" )
-assert buildLog.contains( 'Deleting 1 transitive dependency for project test from ' )
+assert buildLog.contains( 'Deleting 3 transitive dependencies for project test from ' )
 assert buildLog.contains( 'with artifact version resolution fuzziness' )
diff --git a/src/main/java/org/apache/maven/plugins/dependency/utils/ResolverUtil.java b/src/main/java/org/apache/maven/plugins/dependency/utils/ResolverUtil.java
index 52e71ad3..d92cd9fd 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/utils/ResolverUtil.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/utils/ResolverUtil.java
@@ -330,9 +330,11 @@ public class ResolverUtil {
             List<RemoteRepository> remoteProjectRepositories,
             DependencyFilter dependencyFilter)
             throws DependencyResolutionException {
+        // The root is set as an artifact rather than as a dependency: a root dependency makes the session's
+        // DependencySelector treat the project's direct dependencies as transitive and drop provided and test ones.
         CollectRequest collectRequest =
-                new CollectRequest(new Dependency(rootArtifact, null), dependencies, remoteProjectRepositories);
-        collectRequest.setManagedDependencies(managedDependencies);
+                new CollectRequest(dependencies, managedDependencies, remoteProjectRepositories);
+        collectRequest.setRootArtifact(rootArtifact);
         return resolveDependencies(collectRequest, dependencyFilter);
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/dependency/utils/ResolverUtilTest.java b/src/test/java/org/apache/maven/plugins/dependency/utils/ResolverUtilTest.java
index 4b6f5e2c..e421ae5f 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/utils/ResolverUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/utils/ResolverUtilTest.java
@@ -341,7 +341,7 @@ class ResolverUtilTest {
     }
 
     @Test
-    void resolveDependenciesForArtifactWithFilter() throws Exception {
+    void resolveDependenciesForArtifactWithFilterKeepsDirectDependenciesOfAllScopes() throws Exception {
         Artifact rootArtifact = new DefaultArtifact("org.apache.maven.plugins", "artifact", "jar", "1.0");
         DependencyResult dependencyResult = new DependencyResult(new DependencyRequest());
         when(sessionProvider.get()).thenReturn(mavenSession);
@@ -360,11 +360,8 @@ class ResolverUtilTest {
                 .resolveDependencies(
                         eq(repositorySystemSession),
                         argThat(request -> request.getFilter() == dependencyFilter
-                                && request.getCollectRequest().getRootArtifact() == null
-                                && request.getCollectRequest()
-                                        .getRoot()
-                                        .getArtifact()
-                                        .equals(rootArtifact)));
+                                && request.getCollectRequest().getRoot() == null
+                                && request.getCollectRequest().getRootArtifact().equals(rootArtifact)));
     }
 
     @Test