Author: vsiveton
Date: Thu May 29 15:42:28 2008
New Revision: 661516

URL: http://svn.apache.org/viewvc?rev=661516&view=rev
Log:
MJAVADOC-178: Transitive Dependencies to Taglet Artifacts are not resolved nor 
added to the classpath

o added transitive dependencies for docletPath and tagletPath

Modified:
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java?rev=661516&r1=661515&r2=661516&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
 Thu May 29 15:42:28 2008
@@ -64,6 +64,8 @@
 import org.apache.maven.plugin.javadoc.options.Taglet;
 import org.apache.maven.plugin.javadoc.options.TagletArtifact;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.maven.settings.Proxy;
@@ -290,10 +292,19 @@
     /**
      * Specifies whether the javadoc generation should be skipped
      *
+     * @since 2.5
      * @parameter expression="${maven.javadoc.skip}" default-value="false"
      */
     protected boolean skip;
 
+    /**
+     * Project builder
+     *
+     * @since 2.5
+     * @component
+     */
+    private MavenProjectBuilder mavenProjectBuilder;
+
     // ----------------------------------------------------------------------
     // Javadoc Options
     // ----------------------------------------------------------------------
@@ -1990,7 +2001,7 @@
      * @param artifactList       the list of artifacts that will be put in the 
map
      * @throws MavenReportException
      */
-    private void populateCompileArtifactMap( Map compileArtifactMap, List 
artifactList )
+    private void populateCompileArtifactMap( Map compileArtifactMap, 
Collection artifactList )
         throws MavenReportException
     {
         if ( artifactList != null )
@@ -2152,7 +2163,7 @@
         StringBuffer path = new StringBuffer();
         if ( !isDocletArtifactEmpty( docletArtifact ) )
         {
-            path.append( getArtifactAbsolutePath( docletArtifact ) );
+            path.append( StringUtils.join( getArtifactsAbsolutePath( 
docletArtifact ).iterator(), File.pathSeparator ) );
         }
         else if ( docletArtifacts != null )
         {
@@ -2160,7 +2171,7 @@
             {
                 if ( !isDocletArtifactEmpty( docletArtifacts[i] ) )
                 {
-                    path.append( getArtifactAbsolutePath( docletArtifacts[i] ) 
);
+                    path.append( StringUtils.join( getArtifactsAbsolutePath( 
docletArtifacts[i] ).iterator(), File.pathSeparator ) );
 
                     if ( i < docletArtifacts.length - 1 )
                     {
@@ -2222,7 +2233,7 @@
             && ( StringUtils.isNotEmpty( tagletArtifact.getArtifactId() ) )
             && ( StringUtils.isNotEmpty( tagletArtifact.getVersion() ) ) )
         {
-            path.append( getArtifactAbsolutePath( tagletArtifact ) );
+            path.append( StringUtils.join( getArtifactsAbsolutePath( 
tagletArtifact ).iterator(), File.pathSeparator ) );
         }
         else if ( taglets != null )
         {
@@ -2236,16 +2247,12 @@
                     continue;
                 }
 
-                if ( current.getTagletArtifact() != null )
-                {
-                    tagletsPath.add( getArtifactAbsolutePath( 
current.getTagletArtifact() ) );
-                }
-                else if ( ( current.getTagletArtifact() != null )
+                if ( ( current.getTagletArtifact() != null )
                     && ( StringUtils.isNotEmpty( 
current.getTagletArtifact().getGroupId() ) )
                     && ( StringUtils.isNotEmpty( 
current.getTagletArtifact().getArtifactId() ) )
                     && ( StringUtils.isNotEmpty( 
current.getTagletArtifact().getVersion() ) ) )
                 {
-                    tagletsPath.add( getArtifactAbsolutePath( 
current.getTagletArtifact() ) );
+                    tagletsPath.addAll( getArtifactsAbsolutePath( 
current.getTagletArtifact() ) );
                 }
                 else if ( StringUtils.isNotEmpty( current.getTagletpath() ) )
                 {
@@ -2266,29 +2273,57 @@
     }
 
     /**
-     * Return the Javadoc artifact path from the local repository
+     * Return the Javadoc artifact path and its transitive dependencies path 
from the local repository
      *
      * @param javadocArtifact
-     * @return the locale artifact path
-     * @throws MavenReportException
+     * @return a list of locale artifacts absolute path
+     * @throws MavenReportException if any
      */
-    private String getArtifactAbsolutePath( JavadocPathArtifact 
javadocArtifact )
+    private List getArtifactsAbsolutePath( JavadocPathArtifact javadocArtifact 
)
         throws MavenReportException
     {
         if ( ( StringUtils.isEmpty( javadocArtifact.getGroupId() ) )
             && ( StringUtils.isEmpty( javadocArtifact.getArtifactId() ) )
             && ( StringUtils.isEmpty( javadocArtifact.getVersion() ) ) )
         {
-            return "";
+            return Collections.EMPTY_LIST;
         }
 
+        List path = new ArrayList();
+
         Artifact artifact = factory.createArtifact( 
javadocArtifact.getGroupId(), javadocArtifact.getArtifactId(),
-                                                    
javadocArtifact.getVersion(), "compile", "jar" );
+                                                    
javadocArtifact.getVersion(), Artifact.SCOPE_COMPILE, "jar" );
+
         try
         {
+            // Find the Javadoc Artifact in the local repo
             resolver.resolve( artifact, remoteRepositories, localRepository );
+            path.add( artifact.getFile().getAbsolutePath() );
 
-            return artifact.getFile().getAbsolutePath();
+            // Find its transitive dependencies in the local repo
+            MavenProject artifactProject = 
mavenProjectBuilder.buildFromRepository( artifact, remoteRepositories,
+                                                                               
     localRepository );
+            Set dependencyArtifacts = artifactProject.createArtifacts( 
factory, null, null );
+            if ( !dependencyArtifacts.isEmpty() )
+            {
+                ArtifactResolutionResult result = 
resolver.resolveTransitively( dependencyArtifacts, artifactProject
+                    .getArtifact(), 
artifactProject.getRemoteArtifactRepositories(), localRepository,
+                                                                               
 artifactMetadataSource );
+                Set artifacts = result.getArtifacts();
+
+                Map compileArtifactMap = new HashMap();
+                populateCompileArtifactMap( compileArtifactMap, artifacts );
+
+                for ( Iterator it = compileArtifactMap.keySet().iterator(); 
it.hasNext(); )
+                {
+                    String key = it.next().toString();
+
+                    Artifact a = (Artifact) compileArtifactMap.get( key );
+                    path.add( a.getFile().getAbsolutePath() );
+                }
+            }
+
+            return path;
         }
         catch ( ArtifactResolutionException e )
         {
@@ -2298,6 +2333,14 @@
         {
             throw new MavenReportException( "Unable to find artifact:" + 
javadocArtifact, e );
         }
+        catch ( ProjectBuildingException e )
+        {
+            throw new MavenReportException( "Unable to build the Maven project 
for the artifact:" + javadocArtifact, e );
+        }
+        catch ( InvalidDependencyVersionException e )
+        {
+            throw new MavenReportException( "Unable to resolve artifact:" + 
javadocArtifact, e );
+        }
     }
 
     /**


Reply via email to