You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mt...@apache.org on 2021/03/22 08:18:01 UTC

[maven] 01/01: [MNG-7102] The child modules of excluded projects are now excluded as well, making the behavior consistent with MNG-6981.

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

mthmulders pushed a commit to branch MNG-7102-exclude-projects-recursively
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 7c4d2aa2c66e403523a38a21fd34b9c2a8d71e9f
Author: Martin Kanters <ma...@apache.org>
AuthorDate: Sat Feb 20 11:37:17 2021 +0100

    [MNG-7102] The child modules of excluded projects are now excluded as well, making the behavior consistent with MNG-6981.
---
 .../apache/maven/graph/DefaultGraphBuilder.java    | 23 ++++++++++++++++++----
 .../maven/graph/DefaultGraphBuilderTest.java       | 11 +++++++++++
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
index 797cbe2..cad12db 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -140,7 +140,7 @@ public class DefaultGraphBuilder
         activeProjects = trimProjectsToRequest( activeProjects, projectDependencyGraph, session.getRequest() );
         activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
         activeProjects = trimResumedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
-        activeProjects = trimExcludedProjects( activeProjects, session.getRequest() );
+        activeProjects = trimExcludedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
 
         if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
         {
@@ -237,7 +237,8 @@ public class DefaultGraphBuilder
         return result;
     }
 
-    private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, MavenExecutionRequest request )
+    private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, ProjectDependencyGraph graph,
+                                                     MavenExecutionRequest request )
         throws MavenExecutionException
     {
         List<MavenProject> result = projects;
@@ -250,12 +251,26 @@ public class DefaultGraphBuilder
 
             for ( String selector : request.getExcludedProjects() )
             {
-                MavenProject excludedProject = projects.stream()
+                // Instead of looking for the project inside the activeProjects, we should rather look inside the
+                // original list of projects. When someone excludes a project again which has been excluded by one of
+                // the earlier reactor filters (e.g. --resume-from) already, then we should not throw an error.
+                List<MavenProject> allProjects = graph.getSortedProjects();
+                MavenProject excludedProject = allProjects.stream()
                         .filter( project -> isMatchingProject( project, selector, reactorDirectory ) )
                         .findFirst()
                         .orElseThrow( () -> new MavenExecutionException( "Could not find the selected project in "
                                 + "the reactor: " + selector, request.getPom() ) );
-                result.remove( excludedProject );
+
+                boolean isExcludedProjectRemoved = result.remove( excludedProject );
+
+                if ( isExcludedProjectRemoved )
+                {
+                    List<MavenProject> children = excludedProject.getCollectedProjects();
+                    if ( children != null )
+                    {
+                        result.removeAll( children );
+                    }
+                }
             }
         }
 
diff --git a/maven-core/src/test/java/org/apache/maven/graph/DefaultGraphBuilderTest.java b/maven-core/src/test/java/org/apache/maven/graph/DefaultGraphBuilderTest.java
index 4a8f9c0..d5a1811 100644
--- a/maven-core/src/test/java/org/apache/maven/graph/DefaultGraphBuilderTest.java
+++ b/maven-core/src/test/java/org/apache/maven/graph/DefaultGraphBuilderTest.java
@@ -147,6 +147,13 @@ public class DefaultGraphBuilderTest
                         .excludedProjects( MODULE_B )
                         .makeBehavior( REACTOR_MAKE_UPSTREAM )
                         .expectResult( PARENT_MODULE, MODULE_C, MODULE_A, MODULE_C_2 ),
+                scenario( "Excluding a project additionally excludes its children" )
+                        .excludedProjects( MODULE_C )
+                        .expectResult( PARENT_MODULE, MODULE_A, MODULE_B, INDEPENDENT_MODULE ),
+                scenario( "Excluding a project additionally excludes its children, but a child can be selected separately" )
+                        .selectedProjects( MODULE_C_1 )
+                        .excludedProjects( MODULE_C )
+                        .expectResult( MODULE_C_1 ),
                 scenario( "Excluding an also make dependency from resumeFrom does take its transitive dependency" )
                         .resumeFrom( MODULE_C_2 )
                         .excludedProjects( MODULE_B )
@@ -156,6 +163,10 @@ public class DefaultGraphBuilderTest
                         .resumeFrom( MODULE_A )
                         .excludedProjects( MODULE_B )
                         .expectResult( MODULE_A, MODULE_C_2, INDEPENDENT_MODULE ),
+                scenario( "Resume from exclude project upstream (should not fail)" )
+                        .resumeFrom( MODULE_B )
+                        .excludedProjects( MODULE_A )
+                        .expectResult( MODULE_B, MODULE_C_2, INDEPENDENT_MODULE ),
                 scenario( "Exclude the project we are resuming from (as proposed in MNG-6676)" )
                         .resumeFrom( MODULE_B )
                         .excludedProjects( MODULE_B )