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