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.java22:36:39 -0000 1.22.4.4
===================================================================
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
+++ src/java/org/apache/maven/repository/AbstractArtifact.java 29 Mar 200407:39:20 -0000
@@ -48,7 +48,10 @@artifactPath.substring(dot);
/** 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" +
22:36:39 -0000 1.18.10.2+ } + 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
+++ src/java/org/apache/maven/repository/Artifact.java 29 Mar 200407:39:20 -0000
@@ -68,6 +68,14 @@attributes.
* @return The generated path of the artifact based on the dependency
*/attributes.
String generatePath();
+
+ /**
+ * Generate the path for the sources artifact given its dependency
+ *dependency
+ * @return The generated path of the artifact sources based on the
agnostic.+ * 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
+ *repository.
+ * @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
*/the local
boolean exists();
+
+ /**
+ * Boolean flag indicating whether this artifact has sources.
+ *
+ * @return Flag indicating the existance of the artifact sources in
+ * repository.downloaded into
+ */
+ boolean hasSources();
+
+ /**
+ * Indicates the sources for this artifact have been found and
system.+ * 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
05:56:21 -0000 1.34.4.5+ */ + 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
+++ src/java/org/apache/maven/verifier/DependencyVerifier.java 29 Mar 200407:39:20 -0000
@@ -296,20 +296,7 @@"https://" );
// 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:/",
- }"http://" );
- else
- {
- url = StringUtils.replace( url, "http:/",
retrieval- } - } + String url = getUrlInRepo(artifact.getUrlPath(), remoteRepo);
// Attempt to retrieve the artifact and set the checksum if
// of the checksum file was successful.+ e);
@@ -361,9 +348,57 @@
// FIXME: localize this message
log.warn("Error retrieving artifact from [" + url + "]: "
}remoteRepo);
+
+ // If found, search for the artifact sources
+ try {
+
+ String sourcesUrl =
+ getUrlInRepo(artifact.getSourcesUrlPath(),
+ log.debug( "Getting URL: " + sourcesUrl );getProject().getContext().getProxyHost(),
+ HttpUtils.getFile( sourcesUrl,
+ artifact.getSourceFile(),
+ ignoreErrors,
+ useTimestamp,
+
+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.jelly18:04:37 -0000 1.9
===================================================================
retrieving revision 1.9
diff -u -r1.9 classpath.jelly
--- eclipse/src/plugin-resources/templates/classpath.jelly 4 Mar 2004
+++ eclipse/src/plugin-resources/templates/classpath.jelly 29 Mar 200407:40:22 -0000
@@ -114,7 +114,14 @@value="${lib.dependency.isAddedToClasspath()}"/>
<!-- make sure it's a classpath dependency -->
<j:set var="isClasspath"
<j:if test="${isClasspath}">sourcepath="MAVEN_REPO${lib.urlSourcePath}"/>
+ <j:choose>
+ <j:when test="${lib.hasSources()}">
+ <classpathentry kind="var" path="MAVEN_REPO${lib.urlPath}"
+ </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]
