Sorry, I forget to attach the patch files

nicolas De Loof a �crit :

Hello,

I've added a tiny enhancement to maven 1.0 RC2 :

When downloading some artifact from remote repo(s), my patched maven tries to download the artifact sources. It is usefull on eclipse to get generated classpath with associated sources -> inheritence with parameters and javadoc, browse sources, debug ...
(I patched eclispe generate-classpath goal to do this).


The artifact sources for any artifact named "XXXXX.ext" is searched as "XXXXX-src.ext"

You can test it by applying the patch or by downloading the patched "maven.jar" and eclipse plugin "classpath.jelly" from http://ndeloof.free.fr/maven.

I setted a test sources repository on http://ndeloof.free.fr/maven/srcrepository. Naturally, if this patch is accepted, such artifact sources should go on ibiblio.

Building the artifact sources for a mavenized project could be added as enhancement of the jar plugin or use a simpel maven.xml postGoal.


Index: src/java/org/apache/maven/repository/AbstractArtifact.java
===================================================================
retrieving revision 1.22.4.4
diff -u -r1.22.4.4 AbstractArtifact.java
--- src/java/org/apache/maven/repository/AbstractArtifact.java  1 Mar 2004 22:36:39 
-0000       1.22.4.4
+++ src/java/org/apache/maven/repository/AbstractArtifact.java  29 Mar 2004 07:39:20 
-0000
@@ -48,7 +48,10 @@
 
     /** Path to artifact. */
     private String path;
-
+    
+    /** flag to indicate sources are present in repository */
+    private boolean hasSources = false;
+     
     /**
      * Default constructor.
      * @param dependency the dependency the artifact is based on
@@ -58,6 +61,11 @@
         this.dependency = dependency;
     }
 
+    /** @see Artifact#setSourcesFound */
+    public void setSourcesFound() {
+       this.hasSources = true;
+    }
+    
     /** @see Artifact#setDependency */
     public void setDependency( Dependency dependency )
     {
@@ -102,6 +110,31 @@
              + "/" + getDependency().getType() + "s"
              + "/" + getDependency().getArtifact();
     }
+    
+    /** @see Artifact#generateSourcesPath */
+    public String generateSourcesPath() 
+    {
+        String artifactPath = getPath();
+        int dot = artifactPath.lastIndexOf(".");
+        if (dot > 0) 
+        {
+            return artifactPath.substring(0, dot) + "-src" + 
artifactPath.substring(dot);
+        }
+        return "";        
+    }
+    
+    /** @see Artifact#getSourcesUrlPath */
+    public String getSourcesUrlPath()
+    {
+        String artifactPath = getUrlPath();
+        int dot = artifactPath.lastIndexOf(".");
+        if (dot > 0) 
+        {
+            return artifactPath.substring(0, dot) + "-src" + 
artifactPath.substring(dot);
+        }
+        return "";
+    }
+    
 
     /** @see Artifact#getChecksumUrl */
     public String getChecksumUrl()
@@ -125,7 +158,11 @@
     /** @see Artifact#exists */
     public boolean exists()
     {
-        return getFile().exists();
+        boolean exist = getFile().exists();
+        if (exist && getSourceFile().exists()) {
+            setSourcesFound();
+        }
+        return exist;
     }
 
     /** @see Artifact#isSnapshot */
@@ -140,6 +177,17 @@
         return new File( getPath() );
     }
 
+    /** @see Artifact#getSourceFile */
+    public File getSourceFile()
+    {
+        return new File( generateSourcesPath() );
+    }
+    
+    /** @see Artifact#hasSources */
+    public boolean hasSources() {
+        return this.hasSources;
+    }
+    
     /**
      * C H E C K S U M  V E R I F I C A T I O N
      * @throws ChecksumVerificationException when the checksum differs
Index: src/java/org/apache/maven/repository/Artifact.java
===================================================================
retrieving revision 1.18.10.2
diff -u -r1.18.10.2 Artifact.java
--- src/java/org/apache/maven/repository/Artifact.java  1 Mar 2004 22:36:39 -0000      
 1.18.10.2
+++ src/java/org/apache/maven/repository/Artifact.java  29 Mar 2004 07:39:20 -0000
@@ -68,6 +68,14 @@
      * @return The generated path of the artifact based on the dependency attributes.
      */
     String generatePath();
+    
+    /**
+     * Generate the path for the sources artifact given its dependency attributes.
+     *
+     * @return The generated path of the artifact sources based on the dependency 
+     *         attributes.
+     */
+    String generateSourcesPath(); 
 
     /**
      * Return an URL path that is platform agnostic.
@@ -77,6 +85,13 @@
     String getUrlPath();
 
     /**
+     * Return an URL path to the artifact sources that is platform agnostic.
+     *
+     * @return URL of the artifact sources.
+     */
+    String getSourcesUrlPath();
+    
+    /**
      * Return the url to the checksum file for this artifact.
      *
      * @return URL of the checksum file for this artifact.
@@ -103,6 +118,20 @@
      * @return Flag indicating the existance of the artifact in the local repository.
      */
     boolean exists();
+    
+    /**
+     * Boolean flag indicating whether this artifact has sources.
+     *
+     * @return Flag indicating the existance of the artifact sources in the local 
+     *         repository.
+     */
+    boolean hasSources();
+    
+    /**
+     * Indicates the sources for this artifact have been found and downloaded into 
+     * local repository.
+     */
+    void setSourcesFound();
 
     /**
      * Get the location of the artifact in the local file system.
@@ -110,6 +139,13 @@
      * @return The location of the artifact in the local file system.
      */
     File getFile();
+    
+    /**
+     * Get the location of the artifact sources in the local file system.
+     *
+     * @return The location of the artifact sources in the local file system.
+     */
+    File getSourceFile();
 
     /**
      * Verify the artifact.
Index: src/java/org/apache/maven/verifier/DependencyVerifier.java
===================================================================
retrieving revision 1.34.4.5
diff -u -r1.34.4.5 DependencyVerifier.java
--- src/java/org/apache/maven/verifier/DependencyVerifier.java  18 Mar 2004 05:56:21 
-0000      1.34.4.5
+++ src/java/org/apache/maven/verifier/DependencyVerifier.java  29 Mar 2004 07:39:20 
-0000
@@ -296,20 +296,7 @@
 
             // The username and password parameters are not being
             // used here. Those are the "" parameters you see below.
-            String url = remoteRepo + "/" + artifact.getUrlPath();
-            url = StringUtils.replace( url, "//", "/" );
-
-            if ( !url.startsWith( "file" ) )
-            {
-                if ( url.startsWith( "https" ) )
-                {
-                    url = StringUtils.replace( url, "https:/", "https://"; );
-                }
-                else
-                {
-                    url = StringUtils.replace( url, "http:/", "http://"; );
-                }
-            }
+            String url = getUrlInRepo(artifact.getUrlPath(), remoteRepo);
 
             // Attempt to retrieve the artifact and set the checksum if retrieval
             // of the checksum file was successful.
@@ -361,9 +348,57 @@
                 // FIXME: localize this message
                 log.warn("Error retrieving artifact from [" + url + "]: " + e);
             }
+            
+            // If found, search for the artifact sources            
+            try {
+               
+                String sourcesUrl = 
+                    getUrlInRepo(artifact.getSourcesUrlPath(), remoteRepo);
+                log.debug( "Getting URL: " + sourcesUrl );                   
+                HttpUtils.getFile( sourcesUrl,
+                                   artifact.getSourceFile(),
+                                   ignoreErrors,
+                                   useTimestamp,
+                                   getProject().getContext().getProxyHost(),
+                                   getProject().getContext().getProxyPort(),
+                                   getProject().getContext().getProxyUserName(),
+                                   getProject().getContext().getProxyPassword(),
+                                   true );
+                artifact.setSourcesFound();
+            }
+            catch (Exception e)
+            {
+                log.debug("No sources for artifact in this repos", e);
+            }            
         }
 
         return artifactFound;
+    }
+    
+    /**
+     * Convert the urlPath to URL for file in selected repository.
+     * 
+     * @param urlPath path to convert
+     * @param remoteRepo selected repository
+     * @return url in repository
+     */
+    private String getUrlInRepo(String urlPath, String remoteRepo) 
+    {
+        String url = remoteRepo + "/" + urlPath; 
+        url = StringUtils.replace( url, "//", "/" );
+
+        if ( !url.startsWith( "file" ) )
+        {
+            if ( url.startsWith( "https" ) )
+            {
+                url = StringUtils.replace( url, "https:/", "https://"; );
+            }
+            else
+            {
+                url = StringUtils.replace( url, "http:/", "http://"; );
+            }
+        }
+        return url;
     }
 
     // ----------------------------------------------------------------------
Index: eclipse/src/plugin-resources/templates/classpath.jelly
===================================================================
retrieving revision 1.9
diff -u -r1.9 classpath.jelly
--- eclipse/src/plugin-resources/templates/classpath.jelly      4 Mar 2004 18:04:37 
-0000       1.9
+++ eclipse/src/plugin-resources/templates/classpath.jelly      29 Mar 2004 07:40:22 
-0000
@@ -114,7 +114,14 @@
           <!-- make sure it's a classpath dependency -->
           <j:set var="isClasspath" value="${lib.dependency.isAddedToClasspath()}"/>
           <j:if test="${isClasspath}">
+               <j:choose>
+                       <j:when test="${lib.hasSources()}">
+            <classpathentry kind="var" path="MAVEN_REPO${lib.urlPath}" 
sourcepath="MAVEN_REPO${lib.urlSourcePath}"/>
+                               </j:when>
+                               <j:otherwise>
             <classpathentry kind="var" path="MAVEN_REPO${lib.urlPath}"/>
+                               </j:otherwise>
+                       </j:choose>
           </j:if>
         </j:otherwise>
       </j:choose>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to