[ https://issues.apache.org/jira/browse/MNG-6170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15873655#comment-15873655 ]
Karl Heinz Marbaise edited comment on MNG-6170 at 2/19/17 12:27 PM: -------------------------------------------------------------------- After more diving into this: If I add the following condition this will also prevent the NPE being thrown but I'm not sure if this also just covers the problem. {code:java} if (analyzer.getNumberOfBuilds() > 1) { final List<MavenProject> newItemsThatCanBeBuilt = analyzer.markAsFinished( projectBuild.getProject() ); for ( MavenProject mavenProject : newItemsThatCanBeBuilt ) { {code} In the end it looks like the {{markAsFinished}} method is returning wrong results. I'm currently testing with a [multi module project|https://github.com/khmarbaise/javaee]: * root * app * asm * webgui * service * service-client * domain * shade {{webgui}} has a dependency to {{service-client}} and {{service-client}} has a dependency to {{domain}}. So the method {{markAsFinished}} returns {{domain}} in the case to build only the root module which is correct from the dependency point of view. So {{markAsFinished}} returns the project which should be built next based on the reactor build order...So the edge case having to build only a single module (root) seemed to be the real problem here. So introducing the condition {{if (analyzer.getNumberOfBuilds() > 1)}} looks correct to me... was (Author: khmarbaise): After more diving into this: If I add the following condition this will also prevent the NPE being thrown but I'm not sure if this also just covers the problem. {code:java} if (analyzer.getNumberOfBuilds() > 1) { final List<MavenProject> newItemsThatCanBeBuilt = analyzer.markAsFinished( projectBuild.getProject() ); for ( MavenProject mavenProject : newItemsThatCanBeBuilt ) { {code} In the end it looks like the {{markAsFinished}} method is returning wrong results. I'm currently testing with a [multi module project|https://github.com/khmarbaise/javaee]: * root * app * asm * webgui * service * service-client * domain * shade {{webgui}} has a dependency to {{service-client}} and {{service-client}} has a dependency to {{domain}}. So the method {{markAsFinished}} returns {{domain}} in the case to build only the root module which is correct from the dependency point of view. So {{markAsFinished}} returns the project which should be built next based on the reactor build order...So the edge case having to build only a single module (root) seemed to be the real problem here. So introducing the condition {{ if (analyzer.getNumberOfBuilds() > 1) }} looks correct to me... > NPE in cases using Multithreaded -T X versions:set -DnewVersion=1.0-SNAPSHOT > ---------------------------------------------------------------------------- > > Key: MNG-6170 > URL: https://issues.apache.org/jira/browse/MNG-6170 > Project: Maven > Issue Type: Bug > Components: core > Affects Versions: 3.1.1, 3.2.5, 3.3.1, 3.3.9 > Reporter: Karl Heinz Marbaise > Assignee: Karl Heinz Marbaise > Fix For: 3.5.1 > > > Based on the > [issue|https://github.com/mojohaus/versions-maven-plugin/issues/54] marked > for the versions-maven-plugin investigation shows that the real cause of this > problem is located in maven-core. I identified the following point in code as > culprit for the problem: > MultiThreadedBuilder.java > {code} > // for each finished project > for ( int i = 0; i < analyzer.getNumberOfBuilds(); i++ ) > { > try > { > ProjectSegment projectBuild = service.take().get(); > if ( reactorContext.getReactorBuildStatus().isHalted() ) > { > break; > } > final List<MavenProject> newItemsThatCanBeBuilt = > analyzer.markAsFinished( projectBuild.getProject() ); > for ( MavenProject mavenProject : newItemsThatCanBeBuilt ) > { > ProjectSegment scheduledDependent = projectBuildList.get( > mavenProject ); > logger.debug( "Scheduling: " + scheduledDependent ); > Callable<ProjectSegment> cb = > createBuildCallable( rootSession, scheduledDependent, > reactorContext, taskSegment, muxer ); > service.submit( cb ); > } > } > catch ( InterruptedException e ) > { > rootSession.getResult().addException( e ); > break; > } > catch ( ExecutionException e ) > { > // TODO MNG-5766 changes likely made this redundant > rootSession.getResult().addException( e ); > break; > } > } > {code} > And the problematic part is before the second debugging output line: > {code} > ProjectSegment scheduledDependent = projectBuildList.get( > mavenProject ); > logger.debug( "Scheduling: " + scheduledDependent ); > Callable<ProjectSegment> cb = > createBuildCallable( rootSession, scheduledDependent, > reactorContext, taskSegment, muxer ); > service.submit( cb ); > {code} > Cause it happens that the {{scheduledDependent}} could be null which will > cause the issue. > This -looks like- is a regression, cause in Maven 3.0.5 it works without any > issue. -- This message was sent by Atlassian JIRA (v6.3.15#6346)