You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by dk...@apache.org on 2007/12/07 21:55:26 UTC
svn commit: r602215 - in
/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade:
mojo/ resource/
Author: dkulp
Date: Fri Dec 7 12:55:25 2007
New Revision: 602215
URL: http://svn.apache.org/viewvc?rev=602215&view=rev
Log:
Add ability to create a shaded -sources jar along with the shaded code jar.
Modified:
maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java
maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/XmlAppendingTransformer.java
Modified: maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java?rev=602215&r1=602214&r2=602215&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java (original)
+++ maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java Fri Dec 7 12:55:25 2007
@@ -27,10 +27,17 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.plugin.AbstractMojo;
@@ -41,6 +48,7 @@
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
/**
* Mojo that performs shading delegating to the Shader component.
@@ -67,6 +75,42 @@
private Shader shader;
/**
+ * Remote repositories which will be searched for source attachments.
+ *
+ * @parameter expression="${project.remoteArtifactRepositories}"
+ * @required
+ * @readonly
+ */
+ protected List remoteArtifactRepositories;
+
+ /**
+ * Local maven repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @required
+ * @readonly
+ */
+ protected ArtifactRepository localRepository;
+
+ /**
+ * Artifact factory, needed to download source jars for inclusion in classpath.
+ *
+ * @component role="org.apache.maven.artifact.factory.ArtifactFactory"
+ * @required
+ * @readonly
+ */
+ protected ArtifactFactory artifactFactory;
+
+ /**
+ * Artifact resolver, needed to download source jars for inclusion in classpath.
+ *
+ * @component role="org.apache.maven.artifact.resolver.ArtifactResolver"
+ * @required
+ * @readonly
+ */
+ protected ArtifactResolver artifactResolver;
+
+ /**
* Artifacts to include/exclude from the final artifact.
*
* @parameter
@@ -153,14 +197,22 @@
* @parameter expression="${shadedClassifierName}" default-value="shaded"
*/
private String shadedClassifierName;
+
+ /**
+ * When true, it will attempt to create a sources jar as well
+ *
+ * @parameter expression="${createSourcesJar}" default-value="false"
+ */
+ private boolean createSourcesJar;
+
/** @throws MojoExecutionException */
public void execute()
throws MojoExecutionException
{
- Set artifacts = new HashSet();
-
- Set artifactIds = new HashSet();
+ Set artifacts = new LinkedHashSet();
+ Set artifactIds = new LinkedHashSet();
+ Set sourceArtifacts = new LinkedHashSet();
for ( Iterator it = project.getArtifacts().iterator(); it.hasNext(); )
{
@@ -178,12 +230,21 @@
artifacts.add( artifact.getFile() );
artifactIds.add( getId( artifact ) );
+
+ if ( createSourcesJar )
+ {
+ File file = resolveArtifactSources( artifact );
+ if ( file != null )
+ {
+ sourceArtifacts.add( file );
+ }
+ }
}
artifacts.add( project.getArtifact().getFile() );
-
File outputJar = shadedArtifactFileWithClassifier();
+ File sourcesJar = shadedSourceArtifactFileWithClassifier();
// Now add our extra resources
try
@@ -193,11 +254,21 @@
List resourceTransformers = getResourceTrasformers();
shader.shade( artifacts, outputJar, relocators, resourceTransformers );
+
+ if (createSourcesJar)
+ {
+ shader.shade( sourceArtifacts, sourcesJar, relocators, resourceTransformers );
+ }
if ( shadedArtifactAttached )
{
getLog().info( "Attaching shaded artifact." );
projectHelper.attachArtifact( getProject(), "jar", shadedClassifierName, outputJar );
+ if ( createSourcesJar )
+ {
+ projectHelper.attachArtifact( getProject(), "jar",
+ shadedClassifierName + "-sources", sourcesJar );
+ }
}
else
@@ -205,11 +276,24 @@
getLog().info( "Replacing original artifact with shaded artifact." );
File file = shadedArtifactFile();
file.renameTo( new File( outputDirectory, "original-" + file.getName() ) );
-
+
if ( !outputJar.renameTo( file ) )
{
getLog().warn( "Could not replace original artifact with shaded artifact!" );
}
+
+ if ( createSourcesJar )
+ {
+ file = shadedSourcesArtifactFile();
+ file.renameTo( new File( outputDirectory, "original-" + file.getName() ) );
+
+ if ( !sourcesJar.renameTo( file ) )
+ {
+ getLog().warn( "Could not replace original sources artifact with shaded artifact!" );
+ }
+ projectHelper.attachArtifact( project, "jar",
+ "sources", file );
+ }
if ( createDependencyReducedPom )
{
@@ -223,6 +307,35 @@
}
}
+ private File resolveArtifactSources(Artifact artifact) {
+
+ Artifact resolvedArtifact =
+ artifactFactory.createArtifactWithClassifier( artifact.getGroupId(),
+ artifact.getArtifactId(),
+ artifact.getVersion(),
+ "java-source",
+ "sources");
+
+ try
+ {
+ artifactResolver.resolve( resolvedArtifact, remoteArtifactRepositories, localRepository );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ // ignore, the jar has not been found
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ getLog().warn( "Could not get sources for " + artifact );
+ }
+
+ if ( resolvedArtifact.isResolved() )
+ {
+ return resolvedArtifact.getFile();
+ }
+ return null;
+ }
+
private boolean excludeArtifact( Artifact artifact )
{
String id = getId( artifact );
@@ -303,6 +416,13 @@
shadedArtifactId + "-" + artifact.getVersion() + "-" + shadedClassifierName + "." + artifact.getArtifactHandler().getExtension();
return new File( outputDirectory, shadedName );
}
+ private File shadedSourceArtifactFileWithClassifier()
+ {
+ Artifact artifact = project.getArtifact();
+ final String shadedName =
+ shadedArtifactId + "-" + artifact.getVersion() + "-" + shadedClassifierName + "-sources." + artifact.getArtifactHandler().getExtension();
+ return new File( outputDirectory, shadedName );
+ }
private File shadedArtifactFile()
{
@@ -321,6 +441,23 @@
return new File( outputDirectory, shadedName );
}
+ private File shadedSourcesArtifactFile()
+ {
+ Artifact artifact = project.getArtifact();
+
+ String shadedName;
+
+ if ( finalName != null )
+ {
+ shadedName = finalName + "-sources." + artifact.getArtifactHandler().getExtension();
+ }
+ else
+ {
+ shadedName = shadedArtifactId + "-" + artifact.getVersion() + "-sources." + artifact.getArtifactHandler().getExtension();
+ }
+
+ return new File( outputDirectory, shadedName );
+ }
protected MavenProject getProject()
{
@@ -413,7 +550,7 @@
w.close();
- getProject().setFile( f );
+ project.setFile( f );
}
}
Modified: maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java?rev=602215&r1=602214&r2=602215&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java (original)
+++ maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java Fri Dec 7 12:55:25 2007
@@ -205,5 +205,7 @@
}
writer.flush();
+
+ entries.clear();
}
}
Modified: maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java?rev=602215&r1=602214&r2=602215&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java (original)
+++ maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/AppendingTransformer.java Fri Dec 7 12:55:25 2007
@@ -66,5 +66,6 @@
jos.putNextEntry( new JarEntry( resource ) );
IOUtil.copy(new ByteArrayInputStream(data.toByteArray()), jos);
+ data.reset();
}
}
Modified: maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java?rev=602215&r1=602214&r2=602215&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java (original)
+++ maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java Fri Dec 7 12:55:25 2007
@@ -122,6 +122,8 @@
IOUtil.copy( reader, jos );
reader.close();
+
+ components.clear();
}
public boolean hasTransformedResource()
Modified: maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/XmlAppendingTransformer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/XmlAppendingTransformer.java?rev=602215&r1=602214&r2=602215&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/XmlAppendingTransformer.java (original)
+++ maven/sandbox/trunk/plugins/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/resource/XmlAppendingTransformer.java Fri Dec 7 12:55:25 2007
@@ -109,5 +109,7 @@
jos.putNextEntry( new JarEntry( resource ) );
new XMLOutputter(Format.getPrettyFormat()).output(doc, jos);
+
+ doc = null;
}
}