[
https://issues.apache.org/jira/browse/MNG-6170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15873133#comment-15873133
]
Karl Heinz Marbaise commented on MNG-6170:
------------------------------------------
So after more detailed analysis:
The {{build()}} Method of {{MultiThreadedBuilder}} has a projectDependencyGraph
which which lists all projects whereas the {{projectBuildMap}}
{code}
Map<MavenProject, ProjectSegment> projectBuildMap =
projectBuilds.selectSegment( taskSegment );
{code}
only contains the projects which should be built. In case calling {{mvn -T X
versions:set ..}} is only the root module. Inside the method
{{multiThreadedProjectTaskSegmentBuild}} the root module will be scheduled for
execution which looks correct so far.
{code}
// schedule independent projects
for ( MavenProject mavenProject : analyzer.getRootSchedulableBuilds() )
{
ProjectSegment projectSegment = projectBuildList.get( mavenProject
);
logger.debug( "Scheduling: " + projectSegment.getProject() );
Callable<ProjectSegment> cb =
createBuildCallable( rootSession, projectSegment,
reactorContext, taskSegment, muxer );
service.submit( cb );
}
{code}
The second part is:
{code}
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 )
{
...
}
{code}
At the moment it looks like the the information of {{newItemsThatCanBeBuilt}}
is simply wrong in such cases, cause it will return an non empty list where it
should be empty where only the root module should be built.
> 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)