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

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new a3e8da805c Make LifecycleStarter pluggable (#1424)
a3e8da805c is described below

commit a3e8da805c7e8d743700f13924bd2aafe3fe6783
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Thu Feb 29 00:56:36 2024 +0100

    Make LifecycleStarter pluggable (#1424)
---
 .../main/java/org/apache/maven/DefaultMaven.java   |   7 +-
 ...leStarter.java => DefaultLifecycleStarter.java} |  11 +-
 .../maven/lifecycle/internal/LifecycleStarter.java | 116 +--------------------
 3 files changed, 9 insertions(+), 125 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java 
b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index ae58fc8a93..c44a039342 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -91,8 +91,6 @@ public class DefaultMaven implements Maven {
 
     private final Lookup lookup;
 
-    private final LifecycleStarter lifecycleStarter;
-
     private final ExecutionEventCatapult eventCatapult;
 
     private final LegacySupport legacySupport;
@@ -119,7 +117,6 @@ public class DefaultMaven implements Maven {
     @SuppressWarnings("checkstyle:ParameterNumber")
     public DefaultMaven(
             Lookup lookup,
-            LifecycleStarter lifecycleStarter,
             ExecutionEventCatapult eventCatapult,
             LegacySupport legacySupport,
             SessionScope sessionScope,
@@ -131,7 +128,6 @@ public class DefaultMaven implements Maven {
             DefaultSessionFactory defaultSessionFactory,
             @Nullable @Named("ide") WorkspaceReader ideWorkspaceReader) {
         this.lookup = lookup;
-        this.lifecycleStarter = lifecycleStarter;
         this.eventCatapult = eventCatapult;
         this.legacySupport = legacySupport;
         this.sessionScope = sessionScope;
@@ -309,6 +305,9 @@ public class DefaultMaven implements Maven {
 
             validateOptionalProfiles(session, request.getProfileActivation());
 
+            LifecycleStarter lifecycleStarter = 
lookup.lookupOptional(LifecycleStarter.class, request.getBuilderId())
+                    .orElseGet(() -> lookup.lookup(LifecycleStarter.class));
+
             lifecycleStarter.execute(session);
 
             validateOptionalProjects(request, session);
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleStarter.java
similarity index 95%
copy from 
maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
copy to 
maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleStarter.java
index 48c9308c9e..645c6e8692 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleStarter.java
@@ -33,7 +33,6 @@ import org.apache.maven.lifecycle.MissingProjectException;
 import org.apache.maven.lifecycle.NoGoalSpecifiedException;
 import org.apache.maven.lifecycle.internal.builder.Builder;
 import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
-import org.apache.maven.session.scope.internal.SessionScope;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,7 +42,7 @@ import org.slf4j.LoggerFactory;
  */
 @Named
 @Singleton
-public class LifecycleStarter {
+public class DefaultLifecycleStarter implements LifecycleStarter {
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     private final ExecutionEventCatapult eventCatapult;
@@ -59,14 +58,13 @@ public class LifecycleStarter {
     private final Map<String, Builder> builders;
 
     @Inject
-    public LifecycleStarter(
+    public DefaultLifecycleStarter(
             ExecutionEventCatapult eventCatapult,
             DefaultLifecycles defaultLifeCycles,
             BuildListCalculator buildListCalculator,
             LifecycleDebugLogger lifecycleDebugLogger,
             LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator,
-            Map<String, Builder> builders,
-            SessionScope sessionScope) {
+            Map<String, Builder> builders) {
         this.eventCatapult = eventCatapult;
         this.defaultLifeCycles = defaultLifeCycles;
         this.buildListCalculator = buildListCalculator;
@@ -75,6 +73,7 @@ public class LifecycleStarter {
         this.builders = builders;
     }
 
+    @Override
     public void execute(MavenSession session) {
         eventCatapult.fire(ExecutionEvent.Type.SessionStarted, session, null);
 
@@ -99,8 +98,6 @@ public class LifecycleStarter {
                         + " Available lifecycle phases are: " + 
defaultLifeCycles.getLifecyclePhaseList() + ".");
             }
 
-            ProjectIndex projectIndex = new 
ProjectIndex(session.getProjects());
-
             if (logger.isDebugEnabled()) {
                 lifecycleDebugLogger.debugReactorPlan(projectBuilds);
             }
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
index 48c9308c9e..1c97f2084c 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
@@ -18,125 +18,13 @@
  */
 package org.apache.maven.lifecycle.internal;
 
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.maven.execution.ExecutionEvent;
-import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.lifecycle.DefaultLifecycles;
-import org.apache.maven.lifecycle.MissingProjectException;
-import org.apache.maven.lifecycle.NoGoalSpecifiedException;
-import org.apache.maven.lifecycle.internal.builder.Builder;
-import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
-import org.apache.maven.session.scope.internal.SessionScope;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Starts the build life cycle
  *
  */
-@Named
-@Singleton
-public class LifecycleStarter {
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
-    private final ExecutionEventCatapult eventCatapult;
-
-    private final DefaultLifecycles defaultLifeCycles;
-
-    private final BuildListCalculator buildListCalculator;
-
-    private final LifecycleDebugLogger lifecycleDebugLogger;
-
-    private final LifecycleTaskSegmentCalculator 
lifecycleTaskSegmentCalculator;
-
-    private final Map<String, Builder> builders;
-
-    @Inject
-    public LifecycleStarter(
-            ExecutionEventCatapult eventCatapult,
-            DefaultLifecycles defaultLifeCycles,
-            BuildListCalculator buildListCalculator,
-            LifecycleDebugLogger lifecycleDebugLogger,
-            LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator,
-            Map<String, Builder> builders,
-            SessionScope sessionScope) {
-        this.eventCatapult = eventCatapult;
-        this.defaultLifeCycles = defaultLifeCycles;
-        this.buildListCalculator = buildListCalculator;
-        this.lifecycleDebugLogger = lifecycleDebugLogger;
-        this.lifecycleTaskSegmentCalculator = lifecycleTaskSegmentCalculator;
-        this.builders = builders;
-    }
-
-    public void execute(MavenSession session) {
-        eventCatapult.fire(ExecutionEvent.Type.SessionStarted, session, null);
-
-        ReactorContext reactorContext = null;
-        ProjectBuildList projectBuilds = null;
-        MavenExecutionResult result = session.getResult();
-
-        try {
-            if (buildExecutionRequiresProject(session) && 
projectIsNotPresent(session)) {
-                throw new MissingProjectException("The goal you specified 
requires a project to execute"
-                        + " but there is no POM in this directory (" + 
session.getExecutionRootDirectory() + ")."
-                        + " Please verify you invoked Maven from the correct 
directory.");
-            }
-
-            List<TaskSegment> taskSegments = 
lifecycleTaskSegmentCalculator.calculateTaskSegments(session);
-            projectBuilds = 
buildListCalculator.calculateProjectBuilds(session, taskSegments);
-
-            if (projectBuilds.isEmpty()) {
-                throw new NoGoalSpecifiedException("No goals have been 
specified for this build."
-                        + " You must specify a valid lifecycle phase or a goal 
in the format <plugin-prefix>:<goal> or"
-                        + " 
<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>."
-                        + " Available lifecycle phases are: " + 
defaultLifeCycles.getLifecyclePhaseList() + ".");
-            }
-
-            ProjectIndex projectIndex = new 
ProjectIndex(session.getProjects());
-
-            if (logger.isDebugEnabled()) {
-                lifecycleDebugLogger.debugReactorPlan(projectBuilds);
-            }
-
-            ClassLoader oldContextClassLoader = 
Thread.currentThread().getContextClassLoader();
-            ReactorBuildStatus reactorBuildStatus = new 
ReactorBuildStatus(session.getProjectDependencyGraph());
-            reactorContext = new ReactorContext(result, oldContextClassLoader, 
reactorBuildStatus);
-
-            String builderId = session.getRequest().getBuilderId();
-            Builder builder = builders.get(builderId);
-            if (builder == null) {
-                throw new BuilderNotFoundException(
-                        String.format("The builder requested using id = %s 
cannot be" + " found", builderId));
-            }
-
-            int degreeOfConcurrency = 
session.getRequest().getDegreeOfConcurrency();
-            if (degreeOfConcurrency > 1) {
-                logger.info("");
-                logger.info(String.format(
-                        "Using the %s implementation with a thread count of 
%d",
-                        builder.getClass().getSimpleName(), 
degreeOfConcurrency));
-            }
-            builder.build(session, reactorContext, projectBuilds, 
taskSegments, reactorBuildStatus);
-
-        } catch (Exception e) {
-            result.addException(e);
-        } finally {
-            eventCatapult.fire(ExecutionEvent.Type.SessionEnded, session, 
null);
-        }
-    }
-
-    private boolean buildExecutionRequiresProject(MavenSession session) {
-        return lifecycleTaskSegmentCalculator.requiresProject(session);
-    }
+public interface LifecycleStarter {
 
-    private boolean projectIsNotPresent(MavenSession session) {
-        return !session.getRequest().isProjectPresent();
-    }
+    void execute(MavenSession session);
 }

Reply via email to