[MNG-6170] NPE in cases using Multithreaded -T X versions:set

-DnewVersion=1.0-SNAPSHOT
 o In some cases the code will return a null which should
   not be scheduled.
This commit is contained in:
Karl Heinz Marbaise 2017-02-12 12:59:25 +01:00
parent 587317b009
commit 7cdff43aba
1 changed files with 16 additions and 11 deletions

View File

@ -55,6 +55,7 @@
* @since 3.0
* @author Kristian Rosenvold
* Builds one or more lifecycles for a full module
* NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
*/
@Component( role = Builder.class, hint = "multithreaded" )
public class MultiThreadedBuilder
@ -67,7 +68,6 @@ public class MultiThreadedBuilder
@Requirement
private LifecycleModuleBuilder lifecycleModuleBuilder;
public MultiThreadedBuilder()
{
}
@ -142,15 +142,20 @@ private void multiThreadedProjectTaskSegmentBuild( ConcurrencyDependencyGraph an
{
break;
}
final List<MavenProject> newItemsThatCanBeBuilt =
analyzer.markAsFinished( projectBuild.getProject() );
for ( MavenProject mavenProject : newItemsThatCanBeBuilt )
// MNG-6170: Only schedule other modules from reactor if we have more modules to build than one.
if ( analyzer.getNumberOfBuilds() > 1 )
{
ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
logger.debug( "Scheduling: " + scheduledDependent );
Callable<ProjectSegment> cb =
createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
service.submit( cb );
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 )
@ -160,13 +165,13 @@ private void multiThreadedProjectTaskSegmentBuild( ConcurrencyDependencyGraph an
}
catch ( ExecutionException e )
{
// TODO MNG-5766 changes likely made this redundant
// TODO MNG-5766 changes likely made this redundant
rootSession.getResult().addException( e );
break;
}
}
// cancel outstanding builds (if any) - this can happen if an exception is thrown in above block
// cancel outstanding builds (if any) - this can happen if an exception is thrown in above block
Future<ProjectSegment> unprocessed;
while ( ( unprocessed = service.poll() ) != null )