Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Maven Artifact Resolver 1.0.3
-
None
Description
If a transfer of an artifact fails, then a NullPointerException is thrown.
Starting from line 366:
ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace ); DependencyFilter filter = request.getFilter(); DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder; visitor = new TreeDependencyVisitor( visitor ); result.getRoot().accept( visitor ); // <-- if getRoot() is null: kaboom! List<ArtifactRequest> requests = builder.getRequests();
This is the relevant section of my code that causes the error:
final CollectRequest collectRequest = new CollectRequest(); collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE)); collectRequest.setRepositories(Collections.singletonList(mavenCentral)); final DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter); final DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
From looking inside DefaultRepositorySystem.java, it looks like the collection result never gets its root set. At line 340 and following you see this:
if ( request.getRoot() != null ) { result.setRoot( request.getRoot() ); } else if ( request.getCollectRequest() != null ) { CollectResult collectResult; try { request.getCollectRequest().setTrace( trace ); collectResult = dependencyCollector.collectDependencies( session, request.getCollectRequest() ); } catch ( DependencyCollectionException e ) { dce = e; collectResult = e.getResult(); } result.setRoot( collectResult.getRoot() ); result.setCycles( collectResult.getCycles() ); result.setCollectExceptions( collectResult.getExceptions() ); }
Note in particular this line:
result.setRoot( collectResult.getRoot() );
Unless I'm missing something there's no guarantee that collectResult.getRoot() will be non-null if the collection request failed.