A "source" failed download doesn't generate a build failed. Sources are "implicit" optionnal

Nico.

Emmanuel Venisse a �crit :

Can you set optional the sources downloading?

Emmanuel

----- Original Message ----- From: "nicolas De Loof" <[EMAIL PROTECTED]>
Cc: "Maven Developers List" <[EMAIL PROTECTED]>
Sent: Monday, March 29, 2004 9:52 AM
Subject: Re: Enhancement with patch avaible : artifact source attachement





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]




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




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



Reply via email to