Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-6170

NPE in cases using Multithreaded -T X versions:set -DnewVersion=1.0-SNAPSHOT

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.1.1, 3.2.5, 3.3.1, 3.3.9
    • Fix Version/s: 3.5.0-beta-1, 3.5.0
    • Component/s: core
    • Labels:
      None

      Description

      Based on the issue marked for the versions-maven-plugin investigation shows that the real cause of this problem is located in maven-core.

      The short description of the problem is calling Maven via: mvn -T 20 versions:set -DnewVersion=1.0-SNAPSHOT you will get an NPE.

      I identified the following point in code as culprit for the problem:

      MultiThreadedBuilder.java

              // 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;
                  }
              }
      

      And the problematic part is before the second debugging output line:

                          ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
                          logger.debug( "Scheduling: " + scheduledDependent );
                          Callable<ProjectSegment> cb =
                              createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
                          service.submit( cb );
      

      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.

      Update:
      I have found other examples where the NPE occurs:

      • mvn -T20 javadoc:aggregate
      • mvn -T20 install:install-file ...
        This can cause confusion if you are using mvn.config and put thing like -T X into it.

        Attachments

          Activity

            People

            • Assignee:
              khmarbaise Karl Heinz Marbaise
              Reporter:
              khmarbaise Karl Heinz Marbaise
            • Votes:
              1 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: