Fabian van der Veen created MNG-5960: ----------------------------------------
Summary: MojoExecutor overriding resolved artifacts of concurrently built MavenProject Key: MNG-5960 URL: https://issues.apache.org/jira/browse/MNG-5960 Project: Maven Issue Type: Bug Affects Versions: 3.3.9, 3.4.0 Environment: Linux 4.2.0-23-generic #28-Ubuntu SMP Sun Dec 27 17:47:31 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux (Ubuntu 15.10) Maven 3.3.9/3.4.0-SNAPSHOT Reporter: Fabian van der Veen I have found an issue with respect to the {{MojoExecutor}} in {{maven-core}} when building with multiple threads (e.g. {{-T1C}}). I have created a small reproduction project here: https://github.com/fvanderveen/maven-mojo-jojo (in the readme is some more explanation of what I found to be the problem) The reproduction, using the above code: 1. Clone this repository (`git clone https://github.com/fvanderveen/maven-mojo-jojo.git`) 2. Make sure the clone works single-threaded: `mvn clean package`. (This should succeed) 3. Clean the workspace (`mvn clean`) 4. Attempt multi-threaded compilation with at least 2 threads (`mvn package -T2`) Boiled down, it seems like the {{MojoExecutor#ensureDependenciesAreResolved}} will cause an invocation to {{LifecycleDependencyResolver#resolveProjectDependencies}} for _all_ projects in the current {{MavenSession}} if it's configuring a plugin that defines {{@Mojo(aggregator = true)}} and {{DependencyContext#isResolutionRequiredForAggregatedProjects}} return true. This resolving may, if triggered at an unfortunate time, override resolved artifacts for projects that are being built concurrently. In our case, a {{test-compile}} execution of the {{maven-compiler-plugin}} was just configured (setting the resolved artifacts to the test-scope artifacts), and right before its execution, the resolved artifacts got set back to the compile-scope artifacts due to a aggregator plugin being configured at around the same time. Given the way the `ensureDependenciesAreResolved` is structured and what aggregator plugins should do/depend on, I think it would make more sense to _only_ invoke {{LifecycleDependencyResolver#resolveProjectDependencies}} for the modules that are a (grand-)child of the current project. I've created a maven extension (which can be placed in lib/ext) as a temporary workaround using said change; which may be found here if any one else is having the same problems: https://github.com/fvanderveen/maven-non-destructive-mojo-executor -- This message was sent by Atlassian JIRA (v6.3.4#6332)