You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Bulent Erdemir (JIRA)" <ji...@codehaus.org> on 2007/01/26 16:48:44 UTC

[jira] Commented: (MECLIPSE-221) Javadoc's for dependencies are not downloaded correctly (name incorrently specified)

    [ http://jira.codehaus.org/browse/MECLIPSE-221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_86076 ] 

Bulent Erdemir commented on MECLIPSE-221:
-----------------------------------------

Here's a very ugly patch to fix this for the users who desparately need it. 

This patch also fixes the global settings.xml file not used problem in MECLIPSE-2261 by specifying a hard coded global settings.xml file (change the global settings file to the path to your installation). 

Regards,
Bulent Erdemir


Index: C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/EmbedderFactory.java
===================================================================
--- C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/EmbedderFactory.java	(revision 179)
+++ C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/EmbedderFactory.java	(working copy)
@@ -20,6 +20,8 @@
  * under the License.
  */
 
+import java.io.File;
+
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.embedder.ContainerCustomizer;
 import org.apache.maven.embedder.DefaultMavenEmbedRequest;
@@ -40,6 +42,10 @@
     MavenEmbedRequest request = new DefaultMavenEmbedRequest();
     
     request.setConfigurationCustomizer(customizer);
+    
+    File gsFile = new File("c:/dev/tools/maven/conf/settings.xml");
+    logger.info("Hoba.Loading global settings from " + gsFile.getAbsolutePath());
+    request.setGlobalSettingsFile(gsFile);
       
     ClassLoader loader = Thread.currentThread().getContextClassLoader();
     
Index: C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/ClassPathResolver.java
===================================================================
--- C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/ClassPathResolver.java	(revision 179)
+++ C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/src/org/maven/ide/eclipse/embedder/ClassPathResolver.java	(working copy)
@@ -145,8 +145,9 @@
           Path srcPath = materializeArtifactPath(embedder, mavenProject, a, "java-source", "sources", downloadSources, monitor);
 
           IClasspathAttribute[] attributes = new IClasspathAttribute[0];
-          if(srcPath == null) { // no need to search for javadoc if we have source code
-            Path javadocPath = materializeArtifactPath(embedder, mavenProject, a, "java-doc", "javadoc", downloadJavadoc, monitor);
+          //if(srcPath == null) { // no need to search for javadoc if we have source code
+          //Path javadocPath = materializeArtifactPath(embedder, mavenProject, a, "java-doc", "javadoc", downloadJavadoc, monitor);
+          Path javadocPath = materializeArtifactPathJavadoc(embedder, mavenProject, a, "javadoc", "javadoc", downloadJavadoc, monitor);
             String javaDocUrl = null;
             if(javadocPath != null) {
               javaDocUrl = Maven2ClasspathContainerInitializer.getJavaDocUrl(javadocPath.toString());
@@ -157,7 +158,7 @@
               attributes = new IClasspathAttribute[] {JavaCore.newClasspathAttribute(
                   IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME, javaDocUrl)};
             }
-          }
+          //}
 
           libraryEntries.add(JavaCore.newLibraryEntry(new Path(artifactLocation), srcPath, null, new IAccessRule[0],
               attributes, false /*not exported*/));
@@ -233,7 +234,37 @@
     }
     return null;
   }
+
+  // type = "javadoc"
+  private Path materializeArtifactPathJavadoc(MavenEmbedder embedder, MavenProject mavenProject, Artifact a, String type,
+      String suffix, boolean download, IProgressMonitor monitor) throws Exception {
+    String artifactLocation = a.getFile().getAbsolutePath();
+    // artifactLocation ends on '.jar' or '.zip'
+    //File file = new File(artifactLocation.substring(0, artifactLocation.length() - 4) + "-" + suffix + ".jar");
+    File file = new File(artifactLocation.substring(0, artifactLocation.length() - 4) + "-" + type + "." + suffix);
+    if(file.exists()) {
+      // XXX ugly hack to do not download any artifacts
+      return new Path(file.getAbsolutePath());
+    } else if(download) {
+      monitor.beginTask("Resolve " + type + " " + a.getId(), IProgressMonitor.UNKNOWN);
+      try {
+        Artifact f = embedder.createArtifactWithClassifier(a.getGroupId(), a.getArtifactId(), a.getVersion(),
+            type, suffix);
+        if(f != null) {
+          embedder.resolve(f, mavenProject.getRemoteArtifactRepositories(), embedder.getLocalRepository());
+          return new Path(f.getFile().getAbsolutePath());
+        }
+      } catch(AbstractArtifactResolutionException ex) {
+        String name = ex.getGroupId() + ":" + ex.getArtifactId() + "-" + ex.getVersion() + "." + ex.getType();
+        console.logError(ex.getOriginalMessage() + " " + name);
+      } finally {
+        monitor.done();
+      }
+    }
+    return null;
+  }
   
+  
   private String getJavaDocUrl(String artifactLocation, IProgressMonitor monitor) throws CoreException {
     // guess the javadoc url from the project url in the artifact's pom.xml
     File file = new File(artifactLocation.substring(0, artifactLocation.length()-4) + ".pom");
@@ -278,6 +309,7 @@
         request.setPomFile(pomFile.getAbsolutePath());
         request.setBaseDirectory(pomFile.getParentFile());
         request.setTransferListener(new TransferListenerAdapter(monitor, console, indexManager));
+        request.setSettingsFile("c:/dev/tools/maven/conf/settings.xml");
 
         MavenExecutionResult result = mavenEmbedder.readProjectWithDependencies(request);
 
Index: C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/META-INF/MANIFEST.MF
===================================================================
--- C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/META-INF/MANIFEST.MF	(revision 179)
+++ C:/dev/projects/maven/m2eclipse/org.maven.ide.eclipse/META-INF/MANIFEST.MF	(working copy)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Maven 2.0 integration
 Bundle-SymbolicName: org.maven.ide.eclipse; singleton:=true
-Bundle-Version: 0.0.10
+Bundle-Version: 0.0.10.1
 Bundle-Activator: org.maven.ide.eclipse.Maven2Plugin
 Bundle-Vendor: maven.org
 Bundle-Localization: plugin


> Javadoc's for dependencies are not downloaded correctly (name incorrently specified)
> ------------------------------------------------------------------------------------
>
>                 Key: MECLIPSE-221
>                 URL: http://jira.codehaus.org/browse/MECLIPSE-221
>             Project: Maven 2.x Eclipse Plugin
>          Issue Type: Bug
>            Reporter: Bulent Erdemir
>
> Hi,
> Open the preferences for maven and enable "Download artifact javadoc". Then create a basic pom.xml and add a dependency to commons-lang version 2.0. Like below:
> <?xml version="1.0" encoding="UTF-8"?>
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
>   <modelVersion>4.0.0</modelVersion>
>   <groupId>sil1</groupId>
>   <artifactId>sil1</artifactId>
>   <version>0.0.1</version>
>   <dependencies>
>     <dependency>
>       <groupId>commons-lang</groupId>
>       <artifactId>commons-lang</artifactId>
>       <version>2.2</version>
>     </dependency>
>   </dependencies>
> </project> 
> Then issue mvn compile. So that maven downloads the artifacts. 
> maven downloads the pom, the artifact itself. But not the javadoc. Because the repository has the file named "commons-lang-2.2-javadoc.jar " for the javadoc, however, maven searches for a file named "commons-lang-2.2-javadoc.java-doc". 
> So, the plugin needs to be modified to search for the right file name for javadoc retrieval. 
> Bulent Erdemir

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