You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/06/20 08:40:33 UTC

[maven] 26/30: Moved the -rf helper method, including the tests, back to MavenCli. The BuildResumer is now only focused on the --resume feature.

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

rfscholte pushed a commit to branch MNG-5760
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 1aca8bfe21e2560144be480b6eba862fa866aec7
Author: Martin Kanters <Ma...@infosupport.com>
AuthorDate: Sat Jun 6 10:56:55 2020 +0200

    Moved the -rf helper method, including the tests, back to MavenCli. The BuildResumer is now only focused on the --resume feature.
---
 .../org/apache/maven/execution/BuildResumer.java   | 19 -----------
 .../maven/execution/DefaultBuildResumer.java       | 15 ---------
 .../maven/execution/DefaultBuildResumerTest.java   | 33 +------------------
 .../main/java/org/apache/maven/cli/MavenCli.java   | 33 ++++++++++++++++++-
 .../java/org/apache/maven/cli/MavenCliTest.java    | 38 ++++++++++++++++++++++
 5 files changed, 71 insertions(+), 67 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/execution/BuildResumer.java b/maven-core/src/main/java/org/apache/maven/execution/BuildResumer.java
index fd6840e..8de72ca 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/BuildResumer.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/BuildResumer.java
@@ -21,8 +21,6 @@ package org.apache.maven.execution;
 
 import org.apache.maven.project.MavenProject;
 
-import java.util.List;
-
 /**
  * This class describes most of the logic needed for the --resume / -r feature. Its goal is to ensure newer
  * builds of the same project that have the -r command-line flag skip successfully built projects during earlier
@@ -56,21 +54,4 @@ public interface BuildResumer
      */
     void removeResumptionData( final MavenProject rootProject );
 
-    /**
-     * A helper method to determine the value to resume the build with {@code -rf} taking into account the edge case
-     *   where multiple modules in the reactor have the same artifactId.
-     * <p>
-     * {@code -rf :artifactId} will pick up the first module which matches, but when multiple modules in the reactor
-     *   have the same artifactId, effective failed module might be later in build reactor.
-     * This means that developer will either have to type groupId or wait for build execution of all modules which
-     *   were fine, but they are still before one which reported errors.
-     * <p>Then the returned value is {@code groupId:artifactId} when there is a name clash and
-     * {@code :artifactId} if there is no conflict.
-     *
-     * @param mavenProjects Maven projects which are part of build execution.
-     * @param failedProject Project which has failed.
-     * @return Value for -rf flag to resume build exactly from place where it failed ({@code :artifactId} in general
-     * and {@code groupId:artifactId} when there is a name clash).
-     */
-    String getResumeFromSelector( final List<MavenProject> mavenProjects, final MavenProject failedProject );
 }
diff --git a/maven-core/src/main/java/org/apache/maven/execution/DefaultBuildResumer.java b/maven-core/src/main/java/org/apache/maven/execution/DefaultBuildResumer.java
index b5fb1b6..84a6ded 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/DefaultBuildResumer.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/DefaultBuildResumer.java
@@ -93,21 +93,6 @@ public class DefaultBuildResumer implements BuildResumer
         }
     }
 
-    @Override
-    public String getResumeFromSelector( List<MavenProject> mavenProjects, MavenProject failedProject )
-    {
-        boolean hasOverlappingArtifactId = mavenProjects.stream()
-                .filter( project -> failedProject.getArtifactId().equals( project.getArtifactId() ) )
-                .count() > 1;
-
-        if ( hasOverlappingArtifactId )
-        {
-            return failedProject.getGroupId() + ":" + failedProject.getArtifactId();
-        }
-
-        return ":" + failedProject.getArtifactId();
-    }
-
     // This method is made package-private for testing purposes
     Properties determineResumptionProperties( MavenExecutionResult result )
     {
diff --git a/maven-core/src/test/java/org/apache/maven/execution/DefaultBuildResumerTest.java b/maven-core/src/test/java/org/apache/maven/execution/DefaultBuildResumerTest.java
index d2dd9ee..0664cb4 100644
--- a/maven-core/src/test/java/org/apache/maven/execution/DefaultBuildResumerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/execution/DefaultBuildResumerTest.java
@@ -168,41 +168,10 @@ public class DefaultBuildResumerTest
         assertThat( request.getExcludedProjects(), contains( ":module-a", ":module-b", ":module-c" ) );
     }
 
-    @Test
-    public void resumeFromSelectorIsSuggestedWithoutGroupId()
-    {
-        List<MavenProject> allProjects = asList(
-                createMavenProject( "group", "module-a" ),
-                createMavenProject( "group", "module-b" ) );
-        MavenProject failedProject = allProjects.get( 0 );
-
-        String selector = buildResumer.getResumeFromSelector( allProjects, failedProject );
-
-        assertThat( selector, is( ":module-a" ) );
-    }
-
-    @Test
-    public void resumeFromSelectorContainsGroupIdWhenArtifactIdIsNotUnique()
-    {
-        List<MavenProject> allProjects = asList(
-                createMavenProject( "group-a", "module" ),
-                createMavenProject( "group-b", "module" ) );
-        MavenProject failedProject = allProjects.get( 0 );
-
-        String selector = buildResumer.getResumeFromSelector( allProjects, failedProject );
-
-        assertThat( selector, is( "group-a:module" ) );
-    }
-
     private MavenProject createMavenProject( String artifactId )
     {
-        return createMavenProject( "test", artifactId );
-    }
-
-    private MavenProject createMavenProject( String groupId, String artifactId )
-    {
         MavenProject project = new MavenProject();
-        project.setGroupId( groupId );
+        project.setGroupId( "test" );
         project.setArtifactId( artifactId );
         return project;
     }
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 7778a06..5bf6b32 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -1038,7 +1038,7 @@ public class MavenCli
             }
             else if ( project != null && !project.equals( sortedProjects.get( 0 ) ) )
             {
-                String resumeFromSelector = buildResumer.getResumeFromSelector( sortedProjects, project );
+                String resumeFromSelector = getResumeFromSelector( sortedProjects, project );
                 logBuildResumeHint( "mvn <args> -rf " + resumeFromSelector );
             }
 
@@ -1066,6 +1066,37 @@ public class MavenCli
         slf4jLogger.error( buffer().a( "  " ).strong( resumeBuildHint ).toString() );
     }
 
+    /**
+     * A helper method to determine the value to resume the build with {@code -rf} taking into account the edge case
+     *   where multiple modules in the reactor have the same artifactId.
+     * <p>
+     * {@code -rf :artifactId} will pick up the first module which matches, but when multiple modules in the reactor
+     *   have the same artifactId, effective failed module might be later in build reactor.
+     * This means that developer will either have to type groupId or wait for build execution of all modules which
+     *   were fine, but they are still before one which reported errors.
+     * <p>Then the returned value is {@code groupId:artifactId} when there is a name clash and
+     * {@code :artifactId} if there is no conflict.
+     * This method is made package-private for testing purposes.
+     *
+     * @param mavenProjects Maven projects which are part of build execution.
+     * @param failedProject Project which has failed.
+     * @return Value for -rf flag to resume build exactly from place where it failed ({@code :artifactId} in general
+     * and {@code groupId:artifactId} when there is a name clash).
+     */
+    String getResumeFromSelector( List<MavenProject> mavenProjects, MavenProject failedProject )
+    {
+        boolean hasOverlappingArtifactId = mavenProjects.stream()
+                .filter( project -> failedProject.getArtifactId().equals( project.getArtifactId() ) )
+                .count() > 1;
+
+        if ( hasOverlappingArtifactId )
+        {
+            return failedProject.getGroupId() + ":" + failedProject.getArtifactId();
+        }
+
+        return ":" + failedProject.getArtifactId();
+    }
+
     private void logSummary( ExceptionSummary summary, Map<String, String> references, String indent,
                              boolean showErrors )
     {
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
index 173b78c..b0e536f 100644
--- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
@@ -19,6 +19,9 @@ package org.apache.maven.cli;
  * under the License.
  */
 
+import static java.util.Arrays.asList;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -31,10 +34,12 @@ import static org.mockito.Mockito.times;
 
 import java.io.File;
 import java.util.Collections;
+import java.util.List;
 
 import org.apache.commons.cli.ParseException;
 import org.apache.maven.Maven;
 import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.apache.maven.toolchain.building.ToolchainsBuildingRequest;
 import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
@@ -346,4 +351,37 @@ public class MavenCliTest
         orderdEventSpyDispatcherMock.verify(eventSpyDispatcherMock, times(1)).onEvent(any(ToolchainsBuildingResult.class));
     }
 
+    @Test
+    public void resumeFromSelectorIsSuggestedWithoutGroupId()
+    {
+        List<MavenProject> allProjects = asList(
+                createMavenProject( "group", "module-a" ),
+                createMavenProject( "group", "module-b" ) );
+        MavenProject failedProject = allProjects.get( 0 );
+
+        String selector = cli.getResumeFromSelector( allProjects, failedProject );
+
+        assertThat( selector, is( ":module-a" ) );
+    }
+
+    @Test
+    public void resumeFromSelectorContainsGroupIdWhenArtifactIdIsNotUnique()
+    {
+        List<MavenProject> allProjects = asList(
+                createMavenProject( "group-a", "module" ),
+                createMavenProject( "group-b", "module" ) );
+        MavenProject failedProject = allProjects.get( 0 );
+
+        String selector = cli.getResumeFromSelector( allProjects, failedProject );
+
+        assertThat( selector, is( "group-a:module" ) );
+    }
+
+    private MavenProject createMavenProject( String groupId, String artifactId )
+    {
+        MavenProject project = new MavenProject();
+        project.setGroupId( groupId );
+        project.setArtifactId( artifactId );
+        return project;
+    }
 }