[ https://jira.codehaus.org/browse/MNG-4996?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=283684#comment-283684 ]
Frank Meilinger commented on MNG-4996: -------------------------------------- I've tried to do further debugging with this problem (in my situation always surefire testing classpath problems). Til now, it looks like a problem in the maven itself when running massive parallel (-T 20) and not in the surefire plugin. I found the following: Scenario: Building with -T 20 the build fails after some minutes always with a ClassNotFound exception in the SurefirePlugin for classes which are defined as dependency projects with scope test. Often, the junit classes itself could not be found. The error occure randomly in different projects, but always while surefire executes. Analyze: The Method org.apache.maven.project.MavenProject.setResolvedArtifacts(...) is called from org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(...) to set the actual resolved artifacts. The surefire plugin request this artifacts (later) when executing with a call to org.apache.maven.project.MavenProject.getArtifacts() to build the classpath for executing the testing. I put some printouts with timestamp to the maven (3.0.3) code and found, that in case of this error, the setResolvedArtifacts() method in the MavenProject object is called in the wrong order or at the wrong time. First the setResolvedArtifacts() is called with all dependencies for the scopes "compile,provided,runtime,system,test", some milliseconds later this setter is called again for all dependencies for only the scopes "compile,runtime". After that, the surefireplugin starts and calls the getArtifacts() method on the MavenProject an gets the wrong (too short) list of artifacts and all test dependencies are missing to build the surefire test classpath. This results in the ClassNotFoundExecption of the surefire plugin. Maybe the call to setResolvedArtifacts() is made too early before starting the surefire test, because in between it's called again without the test dependencies and before the surefire starts and calls the getArtifacts() method. Looking a bit deeper I found, that the callstack for the setResolvedArtifacts() is: org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:107) org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:259) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:202) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:155) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:147) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) org.apache.maven.lifecycle.internal.LifecycleThreadedBuilder$1.call(LifecycleThreadedBuilder.java:167) org.apache.maven.lifecycle.internal.LifecycleThreadedBuilder$1.call(LifecycleThreadedBuilder.java:163) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:662) I don't really understand the deeper parallel and synchronization mechanisms in maven when using parallel builds, so I don't know what I could do for further analyzing. Maybe someone could give me some information how to dig deeper in this problem. I can reproduce the problem always for each run with -T 20 but it occures often in different sub-projects but always with the described problem. Frank > Maven3 parallel build fails occasionally for classpath problems. > ---------------------------------------------------------------- > > Key: MNG-4996 > URL: https://jira.codehaus.org/browse/MNG-4996 > Project: Maven 2 & 3 > Issue Type: Bug > Components: Plugins and Lifecycle > Affects Versions: 3.0.1 > Environment: maven 3.0.1, maven 3.0 > Reporter: Kari J. Niemi > Assignee: Kristian Rosenvold > > In a multimodule (>120 modules) maven build, the compiler plug-in would seem > to fail in creating a correct class-path every now and then. > Instead of this entry in maven -X logs for a single module build: > ---- > [DEBUG] Configuring mojo > 'org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile' with basic > configurator --> > .. > [DEBUG] (f) classpathElements = > [/home/karniemi/"mymodulepath"/target/classes, > /home/karniemi/.m2/repository/org/apache/servicemix/servicemix-utils/1.2.0/servicemix-utils-1.2.0.jar, > > /home/karniemi/.m2/repository/org/apache/geronimo/specs/geronimo-stax-api_1.0_spec/1.0.1/geronimo-stax-api_1.0_spec-1.0.1.jar, > > /home/karniemi/.m2/repository/org/codehaus/woodstox/wstx-asl/3.2.6/wstx-asl-3.2.6.jar, > > /home/karniemi/.m2/repository/org/apache/servicemix/specs/org.apache.servicemix.specs.jbi-api-1.0/1.4.0/org.apache.servicemix.specs.jbi-api-1.0-1.4.0.jar, > > /home/karniemi/.m2/repository/org/apache/geronimo/specs/geronimo-activation_1.1_spec/1.0.2/geronimo-activation_1.1_spec-1.0.2.jar, > /home/karniemi/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar] > ---- > every now and then I get this in the parallel build: > ---- > [DEBUG] Configuring mojo > 'org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile' with basic > configurator --> > ... > [DEBUG] (f) classpathElements = > [/home/karniemi/"mymodulepath"/target/classes] > ---- > And of course the compilation fails because none of the dependencies are > added to the classpath. Sometimes it goes fine in the multi-module build, but > every now and then it fails for this. > In both maven runs I can see that the dependencies are resolved fine: > ---------- > [DEBUG] "mymodule":jar:DYNAMIC-SNAPSHOT > [DEBUG] junit:junit:jar:4.7:test > [DEBUG] org.apache.servicemix:servicemix-utils:jar:1.2.0:provided > [DEBUG] > org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:provided > [DEBUG] org.codehaus.woodstox:wstx-asl:jar:3.2.6:provided > [DEBUG] > org.apache.servicemix.specs:org.apache.servicemix.specs.jbi-api-1.0:jar:1.4.0:provided > (scope managed from compile) (version managed from 1.1.0) > [DEBUG] > org.apache.geronimo.specs:geronimo-activation_1.1_spec:jar:1.0.2:provided > [DEBUG] log4j:log4j:jar:1.2.14:provided > ----------- > > The pluginArtifactMap looks like this: > -------------------- > [DEBUG] (s) pluginArtifactMap = > {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.6:, > > org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.6:compile, > > org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.6:compile, > > org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.6:compile, > > org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.2:compile, > > org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, > junit:junit=junit:junit:jar:3.8.1:compile, > org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile} > -------------------- > I'm really using jbi-maven-plugin for most of the modules, and that plugin > binds the other plugins -also the compiler-plugin -to maven life-cycle phases. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira