You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2024/02/28 23:56:41 UTC
(maven) branch master updated: Make LifecycleStarter pluggable (#1424)
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 <gn...@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);
}