famod commented on a change in pull request #446:
URL: https://github.com/apache/maven/pull/446#discussion_r579859091



##########
File path: 
maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
##########
@@ -176,38 +177,69 @@ public DefaultGraphBuilder( BuildResumptionDataRepository 
buildResumptionDataRep
     {
         List<MavenProject> result = projects;
 
-        if ( !request.getSelectedProjects().isEmpty() )
+        ProjectActivation projectActivation = request.getProjectActivation();
+        Set<String> requiredSelectors = 
projectActivation.getRequiredActiveProjectSelectors();
+        Set<String> optionalSelectors = 
projectActivation.getOptionalActiveProjectSelectors();
+        if ( !requiredSelectors.isEmpty() || !optionalSelectors.isEmpty() )
         {
-            File reactorDirectory = getReactorDirectory( request );
+            Set<MavenProject> selectedProjects = new HashSet<>( 
requiredSelectors.size() + optionalSelectors.size() );
+            selectedProjects.addAll( getProjectsBySelectors( request, 
projects, requiredSelectors, true ) );
+            selectedProjects.addAll( getProjectsBySelectors( request, 
projects, optionalSelectors, false ) );
+
+            // it can be empty when an optional project is missing from the 
reactor, fallback to returning all projects
+            if ( !selectedProjects.isEmpty() )
+            {
+                result = new ArrayList<>( selectedProjects );
+
+                result = includeAlsoMakeTransitively( result, request, graph );
+
+                // Order the new list in the original order
+                List<MavenProject> sortedProjects = graph.getSortedProjects();
+                result.sort( comparing( sortedProjects::indexOf ) );
+            }
+        }
+
+        return result;
+    }
 
-            Collection<MavenProject> selectedProjects = new LinkedHashSet<>();
+    private Set<MavenProject> getProjectsBySelectors( MavenExecutionRequest 
request, List<MavenProject> projects,
+                                                      Set<String> 
projectSelectors, boolean required )
+            throws MavenExecutionException
+    {
+        Set<MavenProject> selectedProjects = new LinkedHashSet<>();
+        File reactorDirectory = getReactorDirectory( request );
 
-            for ( String selector : request.getSelectedProjects() )
+        for ( String selector : projectSelectors )
+        {
+            Optional<MavenProject> optSelectedProject = projects.stream()
+                    .filter( project -> isMatchingProject( project, selector, 
reactorDirectory ) )
+                    .findFirst();
+            if ( !optSelectedProject.isPresent() )
             {
-                MavenProject selectedProject = projects.stream()
-                        .filter( project -> isMatchingProject( project, 
selector, reactorDirectory ) )
-                        .findFirst()
-                        .orElseThrow( () -> new MavenExecutionException(
-                                "Could not find the selected project in the 
reactor: " + selector, request.getPom() ) );
-                selectedProjects.add( selectedProject );
-
-                List<MavenProject> children = 
selectedProject.getCollectedProjects();
-                if ( children != null )
+                String message = "Could not find the selected project in the 
reactor: " + selector;
+                if ( required )
+                {
+                    throw new MavenExecutionException( message, 
request.getPom() );
+                }
+                else
                 {
-                    selectedProjects.addAll( children );
+                    LOGGER.warn( message );

Review comment:
       TBH, I didn't follow the discussion of optional profiles, but shouldn't 
this be `info` instead?
   I mean I as a user have already made very clear at this point (via "?") that 
the project is optional. So why warn me if it isn't there? For me this is 
purely informative.
   IMO, same for optional profiles.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to