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

cstamas pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new 57acdd41b [MNG-7720] Wrong build order of forked projects (#1038)
57acdd41b is described below

commit 57acdd41b46dbf7ed4a762643d5705c0acc8af2d
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Mar 8 09:03:33 2023 +0100

    [MNG-7720] Wrong build order of forked projects (#1038)
    
    The original fix MNG-7672 matched the "scope" but missed the "order". 
`project.collectedProjects` are in order as loaded (POM order), is not 
topologically sorted.
    
    Fix is to use DAG of projects, ask for downstream projects (will return 
more then we need but sorted) and narrow that list to only contain collected 
projects.
    
    Related commit: 48cac1c003fdc409e8c455c21fcba07050393b0c
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-7720
---
 .../maven/lifecycle/internal/LifecycleDependencyResolver.java | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
index 699d70477..973b798c6 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -90,7 +90,11 @@ public class LifecycleDependencyResolver {
 
     public static List<MavenProject> getProjects(MavenProject project, 
MavenSession session, boolean aggregator) {
         if (aggregator && project.getCollectedProjects() != null) {
-            return 
getProjectAndSubModules(project).collect(Collectors.toList());
+            List<MavenProject> projectAndSubmodules =
+                    
getProjectAndSubModules(project).collect(Collectors.toList()); // not sorted 
but what we need
+            return session.getProjects().stream() // sorted all
+                    .filter(projectAndSubmodules::contains)
+                    .collect(Collectors.toList()); // sorted and filtered to 
what we need
         } else {
             return Collections.singletonList(project);
         }
@@ -99,7 +103,10 @@ public class LifecycleDependencyResolver {
     private static Stream<MavenProject> getProjectAndSubModules(MavenProject 
project) {
         return Stream.concat(
                 Stream.of(project),
-                
project.getCollectedProjects().stream().flatMap(LifecycleDependencyResolver::getProjectAndSubModules));
+                project.getCollectedProjects() == null
+                        ? Stream.empty()
+                        : project.getCollectedProjects().stream()
+                                
.flatMap(LifecycleDependencyResolver::getProjectAndSubModules));
     }
 
     public void resolveProjectDependencies(

Reply via email to