This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
commit ae907a870b8f585952a62eeaaa5a13fe6d7768ef Author: Alexander Kriegisch <alexan...@kriegisch.name> AuthorDate: Sat Jan 20 12:09:42 2024 +0700 [MSHADE-467] Fix concurrency problem with dependency-reduced POM It looks as if running MShade concurrently somehow bleeds MavenSession state into other mojo executions. Therefore, in the lower critical section of ShadeMojo::rewriteDependencyReducedPomIfWeHaveReduction, we use a final static ReentrantLock instance to block concurrent entry to the section. --- .../apache/maven/plugins/shade/mojo/ShadeMojo.java | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java index 396bed1..3a7eaaa 100644 --- a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java +++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java @@ -35,6 +35,8 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; @@ -1048,6 +1050,8 @@ public class ShadeMojo extends AbstractMojo { rewriteDependencyReducedPomIfWeHaveReduction(dependencies, modified, transitiveDeps, model); } + private static final Lock LOCK = new ReentrantLock(); + private void rewriteDependencyReducedPomIfWeHaveReduction( List<Dependency> dependencies, boolean modified, List<Dependency> transitiveDeps, Model model) throws IOException, ProjectBuildingException, DependencyGraphBuilderException { @@ -1112,15 +1116,21 @@ public class ShadeMojo extends AbstractMojo { w.close(); } - ProjectBuildingRequest projectBuildingRequest = - new DefaultProjectBuildingRequest(session.getProjectBuildingRequest()); - projectBuildingRequest.setLocalRepository(session.getLocalRepository()); - projectBuildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories()); + // Lock critical section to fix MSHADE-467 + try { + LOCK.lock(); + ProjectBuildingRequest projectBuildingRequest = + new DefaultProjectBuildingRequest(session.getProjectBuildingRequest()); + projectBuildingRequest.setLocalRepository(session.getLocalRepository()); + projectBuildingRequest.setRemoteRepositories(project.getRemoteArtifactRepositories()); - ProjectBuildingResult result = projectBuilder.build(f, projectBuildingRequest); + ProjectBuildingResult result = projectBuilder.build(f, projectBuildingRequest); - getLog().debug("updateExcludesInDeps()"); - modified = updateExcludesInDeps(result.getProject(), dependencies, transitiveDeps); + getLog().debug("updateExcludesInDeps()"); + modified = updateExcludesInDeps(result.getProject(), dependencies, transitiveDeps); + } finally { + LOCK.unlock(); + } } project.setFile(dependencyReducedPomLocation);