diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java index cf40525c79c1..83bcfd1af5fa 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java @@ -422,9 +422,27 @@ public List executeForkedExecutions( for (Map.Entry> fork : forkedExecutions.entrySet()) { String projectId = fork.getKey(); - int index = projectIndex.getIndices().get(projectId); + Integer idx = projectIndex.getIndices().get(projectId); + if (idx == null) { + throw new LifecycleExecutionException( + "Forked execution references project '" + projectId + + "' which is not in the reactor. This can happen with parallel builds" + + " (-T) or when extensions modify the session projects.", + mojoExecution, + project); + } + int index = idx; MavenProject forkedProject = projectIndex.getProjects().get(projectId); + if (forkedProject == null) { + throw new LifecycleExecutionException( + "Forked execution references project '" + projectId + + "' which is not in the reactor (no project instance). This can happen" + + " with parallel builds (-T) or when extensions modify the session" + + " projects.", + mojoExecution, + project); + } forkedProjects.add(forkedProject); diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java index 372cbf1b4376..8f87bfafb17b 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java @@ -18,9 +18,9 @@ */ package org.apache.maven.lifecycle.internal; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.lifecycle.internal.builder.BuilderCommon; import org.apache.maven.project.MavenProject; @@ -43,8 +43,8 @@ public final class ProjectIndex { private final Map indices; public ProjectIndex(List projects) { - this.projects = new HashMap<>(projects.size() * 2); - this.indices = new HashMap<>(projects.size() * 2); + this.projects = new ConcurrentHashMap<>(projects.size() * 2); + this.indices = new ConcurrentHashMap<>(projects.size() * 2); for (int i = 0; i < projects.size(); i++) { MavenProject project = projects.get(i);