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);

Reply via email to