[ 
http://jira.codehaus.org/browse/MPIR-132?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vincent Siveton closed MPIR-132.
--------------------------------

    Resolution: Cannot Reproduce

Unable to reproduce it

> Dependency report fails on system-scope dependencies
> ----------------------------------------------------
>
>                 Key: MPIR-132
>                 URL: http://jira.codehaus.org/browse/MPIR-132
>             Project: Maven 2.x Project Info Reports Plugin
>          Issue Type: Bug
>          Components: dependencies
>    Affects Versions: 2.1
>            Reporter: Kohsuke Kawaguchi
>         Attachments: MPIR-132-test.patch
>
>
> If a project includes a dependency to the system-scope artifact (such as 
> tools.jar), the dependency report generation fails with NPE.
> MPIR-37 is probably the same issue, but I couldn't reopen it.
> {noformat}
>         java.lang.NullPointerException
>               at 
> org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:92)
>               at 
> org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:73)
>               at 
> org.apache.maven.project.DefaultMavenProjectBuilder.findModelFromRepository(DefaultMavenProjectBuilder.java:526)
>               at 
> org.apache.maven.project.DefaultMavenProjectBuilder.buildFromRepository(DefaultMavenProjectBuilder.java:234)
>               at 
> org.apache.maven.report.projectinfo.dependencies.RepositoryUtils.getMavenProjectFromRepository(RepositoryUtils.java:316)
>               at 
> org.apache.maven.report.projectinfo.dependencies.renderer.DependenciesRenderer.renderSectionDependencyRepositoryLocations(DependenciesRenderer.java:623)
>               at 
> org.apache.maven.report.projectinfo.dependencies.renderer.DependenciesRenderer.renderBody(DependenciesRenderer.java:274)
>               at 
> org.apache.maven.reporting.AbstractMavenReportRenderer.render(AbstractMavenReportRenderer.java:65)
>               at 
> org.apache.maven.report.projectinfo.DependenciesReport.executeReport(DependenciesReport.java:239)
>               at 
> org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:90)
>               at 
> org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:139)
>               at 
> org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.renderModule(DefaultSiteRenderer.java:269)
>               at 
> org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render(DefaultSiteRenderer.java:101)
>               at 
> org.apache.maven.plugins.site.SiteMojo.renderLocale(SiteMojo.java:133)
>               at 
> org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:100)
>               at 
> org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:443)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
>               at 
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
>               at 
> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:334)
>               at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
>               at org.apache.maven.cli.MavenCli.main(MavenCli.java:280)
>               at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>               at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>               at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>               at java.lang.reflect.Method.invoke(Method.java:585)
>               at 
> org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
>               at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>               at 
> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>               at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
> {noformat}
> The essence of the problem is as follows.
> DependenciesRenderer has the following code to build POM out of all 
> dependencies, so that it can generate transitive dependency tree:
> {noformat}
>         populateRepositoryMap( repoMap, 
> repoUtils.getRemoteArtifactRepositories() );
>         for ( Iterator it = alldeps.iterator(); it.hasNext(); )
>         {
>             Artifact artifact = (Artifact) it.next();
>             try
>             {
>                 MavenProject artifactProject = 
> repoUtils.getMavenProjectFromRepository( artifact );
>                 populateRepositoryMap( repoMap, 
> artifactProject.getRemoteArtifactRepositories() );
>             }
>             catch ( ProjectBuildingException e )
>             {
>                 log.warn( "Unable to create Maven project from repository.", 
> e );
>             }
>         }
> {noformat}
> So when a project has a dependency to the system-scoped artifact, 
> repoUtils.getMavenProjectFromRepository( artifact ) invocation happens.
> The implementation of this method is as follows:
> {noformat}
>     public MavenProject getMavenProjectFromRepository( Artifact artifact )
>         throws ProjectBuildingException
>     {
>         Artifact projectArtifact = artifact;
>         boolean allowStubModel = false;
>         if ( !"pom".equals( artifact.getType() ) )
>         {
>             projectArtifact = factory.createProjectArtifact( 
> artifact.getGroupId(), artifact.getArtifactId(),
>                                                              
> artifact.getVersion(), artifact.getScope() );
>             allowStubModel = true;
>         }
>         // TODO: we should use the MavenMetadataSource instead
>         return mavenProjectBuilder.buildFromRepository( projectArtifact, 
> remoteRepositories, localRepository,
>                                                         allowStubModel );
>     }
> {noformat}
> You see that this calls "createProjectArtifact()". This is where the problem 
> happens --- that is, it ends up creating an Artifact object that has the 
> system scope, yet it won't have the file.
> Eventually, MavenProjectBuilder tries to resolve this artifact, which gets to 
> DefaultArtifactResolver.resolve() as below:
> {noformat}
>     private void resolve( Artifact artifact, List remoteRepositories, 
> ArtifactRepository localRepository,
>                           boolean force )
>         throws ArtifactResolutionException, ArtifactNotFoundException
>     {
>         if ( artifact != null )
>         {
>             if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
>             {
>                 File systemFile = artifact.getFile();
>                 if ( !systemFile.exists() )
>                 {
>                     throw new ArtifactNotFoundException(
>                         "System artifact: " + artifact + " not found in path: 
> " + systemFile, artifact );
>                 }
> {noformat}
> And "systemFile.exists()" causes NPE.
> I recommend fixing the getMavenProjectFromRepository method so that it throws 
> ProjectBuildingException immediately if a system-scoped artifact is given.
> By the definition of the system scope, there's no POM. A very similar code 
> exists in DefaultMavenProjectBuilder.findModelFromRepository() that also 
> needs to be fixed.
> Given that this problematic code is found in two places, I also recommend 
> changing DefaultArtifactResolver.resolve() method so that it handles this 
> situation gracefully
> to avoid NPE.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to