[ 
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:05 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.



was (Author: khmarbaise):
After more diving into this:

If I add the following condition this will also prevent the NPE being extracted 
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.


> 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)

Reply via email to