diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLifecycleRegistry.java b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLifecycleRegistry.java index 60a6c0b32a0b..2e08f5d5806f 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLifecycleRegistry.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLifecycleRegistry.java @@ -28,7 +28,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -251,13 +250,11 @@ public Stream allPhases() { @Override public List plugins() { Map lfPhases = lifecycle.getDefaultLifecyclePhases(); - LifecyclePhase phase = lfPhases != null ? lfPhases.get(name) : null; - if (phase != null) { - Map plugins = new LinkedHashMap<>(); - DefaultPackagingRegistry.parseLifecyclePhaseDefinitions(plugins, name, phase); - return plugins.values().stream().toList(); - } - return List.of(); + return lfPhases != null + ? List.of(DefaultPackagingRegistry.parseLifecyclePhaseDefinitions(lfPhases) + .values() + .toArray(Plugin[]::new)) + : List.of(); } @Override diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java index d865d12b4a96..a22ee25b6070 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java @@ -23,7 +23,7 @@ import javax.inject.Singleton; import java.util.ArrayList; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -73,41 +73,35 @@ public DefaultPackagingRegistry(Lookup lookup, TypeRegistry typeRegistry, List

lookup(String id) { - id = id.toLowerCase(Locale.ROOT); + String lid = id.toLowerCase(Locale.ROOT); // TODO: we should be able to inject a Map directly, // however, SISU visibility filtering can only happen when an explicit // lookup is performed. The whole problem here is caused by "project extensions" // which are bound to a project's classloader, without any clear definition // of a "project scope" - LifecycleMapping lifecycleMapping = - lookup.lookupOptional(LifecycleMapping.class, id).orElse(null); - if (lifecycleMapping == null) { - return Optional.empty(); - } - Type type = typeRegistry.lookup(id).orElse(null); - if (type == null) { - return Optional.empty(); - } - return Optional.of(new DefaultPackaging(id, type, getPlugins(lifecycleMapping))); + return lookup.lookupOptional(LifecycleMapping.class, lid).flatMap(lifecycleMapping -> typeRegistry + .lookup(lid) + .map(type -> new DefaultPackaging(lid, type, getPlugins(lifecycleMapping)))); } private Map getPlugins(LifecycleMapping lifecycleMapping) { - Map lfs = new HashMap<>(); - lifecycleMapping.getLifecycles().forEach((id, lifecycle) -> { - Map plugins = new HashMap<>(); - lifecycle - .getLifecyclePhases() - .forEach((phase, lifecyclePhase) -> parseLifecyclePhaseDefinitions(plugins, phase, lifecyclePhase)); - lfs.put(id, PluginContainer.newBuilder().plugins(plugins.values()).build()); - }); - return lfs; + return lifecycleMapping.getLifecycles().entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> PluginContainer.newBuilder() + .plugins(parseLifecyclePhaseDefinitions(e.getValue().getLifecyclePhases()) + .values()) + .build())); } - static void parseLifecyclePhaseDefinitions(Map plugins, String phase, LifecyclePhase goals) { + static Map parseLifecyclePhaseDefinitions(Map phases) { InputLocation location = DefaultLifecycleRegistry.DEFAULT_LIFECYCLE_INPUT_LOCATION; + Map plugins = new LinkedHashMap<>(); + + phases.forEach((phase, goals) -> { + List mojos = goals.getMojos(); + if (mojos == null) { + return; + } - List mojos = goals.getMojos(); - if (mojos != null) { for (int i = 0; i < mojos.size(); i++) { LifecycleMojo mojo = mojos.get(i); @@ -181,7 +175,9 @@ static void parseLifecyclePhaseDefinitions(Map plugins, String p plugins.put(key, plugin); } - } + }); + + return plugins; } private static String getExecutionId(Plugin plugin, String goal) { diff --git a/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlan.java b/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlan.java index f87b9fb72009..bbc7138b2e85 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlan.java +++ b/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlan.java @@ -76,9 +76,7 @@ public Stream allSteps() { } public Stream steps(MavenProject project) { - return Optional.ofNullable(plan.get(project)) - .map(m -> m.values().stream()) - .orElse(Stream.empty()); + return Optional.ofNullable(plan.get(project)).stream().flatMap(m -> m.values().stream()); } public Optional step(MavenProject project, String name) { @@ -103,7 +101,7 @@ private Map merge(Map org, Map b.predecessors.isEmpty()).toList(); firsts.stream() .filter(addNode -> !org.containsKey(addNode.name)) - .forEach(addNode -> lasts.forEach(orgNode -> addNode.executeAfter(orgNode))); + .forEach(addNode -> lasts.forEach(addNode::executeAfter)); add.forEach((name, node) -> org.merge(name, node, this::merge)); return org; } diff --git a/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlanExecutor.java b/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlanExecutor.java index 8b330cc048da..249a04f846db 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlanExecutor.java +++ b/impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlanExecutor.java @@ -251,7 +251,7 @@ public BuildPlan buildInitialPlan(List taskSegments) { // Create plan, setup and teardown for (MavenProject project : plan.getAllProjects().keySet()) { BuildStep pplan = new BuildStep(PLAN, project, null); - pplan.status.set(PLANNING); // the plan step always need planning + pplan.status.set(PLANNING); // the plan step always needs planning BuildStep setup = new BuildStep(SETUP, project, null); BuildStep teardown = new BuildStep(TEARDOWN, project, null); teardown.executeAfter(setup); @@ -694,7 +694,7 @@ protected void handleBuildError( } else if (MavenExecutionRequest.REACTOR_FAIL_FAST.equals(session.getReactorFailureBehavior())) { buildContext.getReactorBuildStatus().halt(); } else { - logger.error("invalid reactor failure behavior " + session.getReactorFailureBehavior()); + logger.error("invalid reactor failure behavior {}", session.getReactorFailureBehavior()); buildContext.getReactorBuildStatus().halt(); } } @@ -848,11 +848,11 @@ public BuildPlan calculateLifecycleMappings( plan.addProject(project, steps); } - // Create inter project dependencies + // Create inter-project dependencies plan.allSteps().filter(step -> step.phase != null).forEach(step -> { Lifecycle.Phase phase = step.phase; MavenProject project = step.project; - phase.links().stream().forEach(link -> { + phase.links().forEach(link -> { BuildStep before = plan.requiredStep(project, BEFORE + phase.name()); BuildStep after = plan.requiredStep(project, AFTER + phase.name()); Lifecycle.Pointer pointer = link.pointer();