You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2007/07/06 18:03:55 UTC

svn commit: r553938 [1/3] - in /maven/plugins/trunk/maven-shade-plugin: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/codehaus/ src/main/java/org/codehaus/mojo/ src/main/java/org/codehaus/mojo/shade/ src/main/java/org/codehaus/m...

Author: jvanzyl
Date: Fri Jul  6 09:03:52 2007
New Revision: 553938

URL: http://svn.apache.org/viewvc?view=rev&rev=553938
Log:
o adding the shade maven plugin

Added:
    maven/plugins/trunk/maven-shade-plugin/
    maven/plugins/trunk/maven-shade-plugin/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/
    maven/plugins/trunk/maven-shade-plugin/src/main/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/MavenJDOMWriter.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/PomWriter.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/Relocator.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/SimpleRelocator.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheNoticeResourceTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ComponentsXmlResourceTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ResourceTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/
    maven/plugins/trunk/maven-shade-plugin/src/test/jars/
    maven/plugins/trunk/maven-shade-plugin/src/test/jars/plexus-utils-1.4.1.jar   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-project-1.0-SNAPSHOT.jar   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/java/
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/
    maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/ShadeMojoTest.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/App.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml   (with props)
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/
    maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java   (with props)
    maven/plugins/trunk/maven-shade-plugin/static-remapper.txt   (with props)

Added: maven/plugins/trunk/maven-shade-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,85 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>maven-plugins</artifactId>
+    <groupId>org.apache.maven.plugins</groupId>
+    <version>8</version>
+  </parent>  <artifactId>shade-maven-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <version>1.0-alpha-9-SNAPSHOT</version>
+  <name>maven-shade-plugin</name>
+  <dependencies>
+    <dependency>
+      <groupId>asm</groupId>
+      <artifactId>asm-all</artifactId>
+      <version>20070324</version>
+    </dependency>
+    <dependency>
+      <groupId>jdom</groupId>
+      <artifactId>jdom</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.4.1</version>
+    </dependency> 
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>2.0.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-model</artifactId>
+      <version>2.0.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0.6</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+   <plugins>
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-maven-plugin</artifactId>
+        <version>1.3.5</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,166 @@
+package org.codehaus.mojo.shade;
+
+import org.codehaus.mojo.shade.relocation.Relocator;
+import org.codehaus.mojo.shade.resource.ResourceTransformer;
+import org.codehaus.plexus.util.IOUtil;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.commons.Remapper;
+import org.objectweb.asm.commons.RemappingClassAdapter;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+
+/**
+ * @author Jason van Zyl
+ * @plexus.component
+ */
+public class DefaultShader
+    implements Shader
+{
+    public void shade( Set jars,
+                       File uberJar,
+                       List relocators,
+                       List resourceTransformers )
+        throws IOException
+    {
+        Set resources = new HashSet();
+
+        MyRemapper remapper = new MyRemapper( relocators );
+
+        JarOutputStream jos = new JarOutputStream( new FileOutputStream( uberJar ) );
+
+        for ( Iterator i = jars.iterator(); i.hasNext(); )
+        {
+            File jar = (File) i.next();
+
+            JarFile jarFile = new JarFile( jar );
+
+            for ( Enumeration j = jarFile.entries(); j.hasMoreElements(); )
+            {
+                JarEntry entry = (JarEntry) j.nextElement();
+
+                String name = entry.getName();
+
+                InputStream is = jarFile.getInputStream( entry );
+
+                if ( entry.isDirectory() )
+                {
+                    IOUtil.copy( is, jos );
+                }
+                else
+                {
+                    if ( name.endsWith( ".class" ) )
+                    {
+                        ClassReader cr = new ClassReader( is );
+
+                        ClassWriter cw = new ClassWriter( cr, 0 );
+
+                        ClassVisitor cv = new RemappingClassAdapter( cw, remapper );
+
+                        cr.accept( cv, 0 );
+
+                        byte[] renamedClass = cw.toByteArray();
+
+                        // Need to take the .class off for remapping evaluation                        
+                        String newName = remapper.map( name.substring( 0, name.indexOf( '.' ) ) );
+
+                        // Now we put it back on so the class file is written out with the right extension.
+                        jos.putNextEntry( new JarEntry( newName + ".class" ) );
+
+                        IOUtil.copy( renamedClass, jos );
+                    }
+                    else
+                    {
+                        boolean resourceTransformed = false;
+
+                        for ( Iterator k = resourceTransformers.iterator(); k.hasNext(); )
+                        {
+                            ResourceTransformer transformer = (ResourceTransformer) k.next();
+
+                            if ( transformer.canTransformResource( name ) )
+                            {
+                                transformer.processResource( is );
+
+                                resourceTransformed = true;
+
+                                break;
+                            }
+                        }
+
+                        if ( !resourceTransformed )
+                        {
+                            // Avoid duplicates that aren't accounted for by the resource transformers
+                            if ( resources.contains( name ) )
+                            {
+                                continue;
+                            }
+
+                            jos.putNextEntry( new JarEntry( name ) );
+
+                            IOUtil.copy( is, jos );
+
+                            resources.add( name );
+                        }
+                    }
+                }
+
+                IOUtil.close( is );
+            }
+        }
+
+        for ( Iterator i = resourceTransformers.iterator(); i.hasNext(); )
+        {
+            ResourceTransformer transformer = (ResourceTransformer) i.next();
+
+            if ( transformer.hasTransformedResource() )
+            {
+                transformer.modifyOutputStream( jos );
+            }
+        }
+
+        IOUtil.close( jos );
+    }
+
+    class MyRemapper
+        extends Remapper
+    {
+        List relocators;
+
+        public MyRemapper( List relocators )
+        {
+            this.relocators = relocators;
+        }
+
+        public Object mapValue( Object object )
+        {
+            return object;
+        }
+
+        public String map( String name )
+        {
+            for ( Iterator i = relocators.iterator(); i.hasNext(); )
+            {
+                Relocator r = (Relocator) i.next();
+
+                if ( r.canRelocate( name ) )
+                {
+                    return r.relocate( name );
+                }
+            }
+
+            return name;
+        }
+    }
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/DefaultShader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,6 @@
+package org.codehaus.mojo.shade;
+
+/** @author Jason van Zyl */
+public interface ShadeConfiguration
+{
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadeConfiguration.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,18 @@
+package org.codehaus.mojo.shade;
+
+import java.util.Set;
+import java.util.List;
+import java.io.IOException;
+import java.io.File;
+
+/** @author Jason van Zyl */
+public interface Shader
+{
+    String ROLE = Shader.class.getName();
+
+    public void shade( Set jars,
+                       File uberJar,
+                       List relocators,
+                       List resourceTransformers )
+        throws IOException;
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/Shader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,6 @@
+package org.codehaus.mojo.shade;
+
+/** @author Jason van Zyl */
+public class ShadingResult
+{
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/ShadingResult.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,21 @@
+package org.codehaus.mojo.shade.mojo;
+
+import java.util.Set;
+
+/** @author Jason van Zyl */
+public class ArtifactSet
+{
+    private Set includes;
+
+    private Set excludes;
+
+    public Set getIncludes()
+    {
+        return includes;
+    }
+
+    public Set getExcludes()
+    {
+        return excludes;
+    }
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ArtifactSet.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,21 @@
+package org.codehaus.mojo.shade.mojo;
+
+import java.util.List;
+
+/** @author Jason van Zyl */
+public class PackageRelocation
+{
+    private String pattern;
+
+    private List excludes;
+
+    public String getPattern()
+    {
+        return pattern;
+    }
+
+    public List getExcludes()
+    {
+        return excludes;
+    }
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/PackageRelocation.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,327 @@
+package org.codehaus.mojo.shade.mojo;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Dependency;
+import org.codehaus.mojo.shade.Shader;
+import org.codehaus.mojo.shade.pom.PomWriter;
+import org.codehaus.mojo.shade.relocation.SimpleRelocator;
+import org.codehaus.mojo.shade.resource.ResourceTransformer;
+
+/**
+ * @author Jason van Zyl
+ * @author Mauro Talevi
+ * @goal shade
+ * @phase package
+ */
+public class ShadeMojo
+    extends AbstractMojo
+{
+    /**
+     * @parameter expression="${project}"
+     * @readonly
+     */
+    private MavenProject project;
+
+    /** @component */
+    private MavenProjectHelper projectHelper;
+
+    /** @component */
+    private Shader shader;
+
+    /**
+     * Artifacts to include/exclude from the final artifact.
+     *
+     * @parameter
+     */
+    private ArtifactSet artifactSet;
+
+    /**
+     * Packages to be relocated.
+     *
+     * @parameter
+     */
+    private PackageRelocation[] relocations;
+
+    /**
+     * Resource transformers to be used.
+     *
+     * @parameter
+     */
+    private ResourceTransformer[] transformers;
+
+    /** @parameter expression="${project.build.directory}" */
+    private File outputDirectory;
+
+    /**
+     * The name of the shaded artifactId
+     *
+     * @parameter expression="${shadedArtifactId}" default-value="${project.artifactId}"
+     */
+    private String shadedArtifactId;
+
+    /**
+     * If specified, this will include only artifacts which have groupIds which
+     * start with this.
+     *
+     * @parameter expression="${shadedGroupFilter}"
+     */
+    private String shadedGroupFilter;
+
+    /**
+     * Defines whether the shaded artifact should be attached as classifier to
+     * the original artifact.  If false, the shaded jar will be the main artifact
+     * of the project
+     *
+     * @parameter expression="${shadedArtifactAttached}" default-value="false"
+     */
+    private boolean shadedArtifactAttached;
+
+    /**
+     * @parameter expression="${createDependencyReducedPom}" default-value="true"
+     */
+    private boolean createDependencyReducedPom;
+
+    /**
+     * The name of the classifier used in case the shaded artifact is attached.
+     *
+     * @parameter expression="${shadedClassifierName}" default-value="shaded"
+     */
+    private String shadedClassifierName;
+
+    /** @throws MojoExecutionException  */
+    public void execute()
+        throws MojoExecutionException
+    {
+        Set artifacts = new HashSet();
+
+        Set artifactIds = new HashSet();
+
+        for ( Iterator it = project.getArtifacts().iterator(); it.hasNext(); )
+        {
+            Artifact artifact = (Artifact) it.next();
+   
+            if ( excludeArtifact( artifact ) )
+            {
+                getLog().info( "Excluding " + artifact.getId() + " from the shaded jar." );
+
+                continue;
+            }
+
+            getLog().debug( "Including " + artifact.getId() + " in the shaded jar." );
+
+            artifacts.add( artifact.getFile() );
+
+            artifactIds.add( getId( artifact ) );
+        }
+
+        artifacts.add( project.getArtifact().getFile() );
+
+
+        File outputJar = shadedArtifactFileWithClassifier();
+
+        // Now add our extra resources
+        try
+        {
+            List relocators = getRelocators();
+
+            List resourceTransformers = getResourceTrasformers();
+
+            shader.shade( artifacts, outputJar, relocators, resourceTransformers );
+
+            if ( shadedArtifactAttached )
+            {
+                getLog().info( "Attaching shaded artifact." );
+                projectHelper.attachArtifact( getProject(), "jar", shadedClassifierName, outputJar );
+            }
+
+            else
+            {
+                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 ( createDependencyReducedPom )
+                {
+                    createDependencyReducedPom( artifactIds );
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error creating shaded jar.", e );
+        }
+    }
+
+    private boolean excludeArtifact( Artifact artifact )
+    {
+        String id = getId( artifact );
+
+        // This is the case where we have only stated artifacts to include and no exclusions
+        // have been listed. We just want what we have asked to include.
+        if ( ( artifactSet.getExcludes() == null && artifactSet.getIncludes() != null ) && !includedArtifacts().contains( id ) )
+        {
+            return true;
+        }
+
+        if ( excludedArtifacts().contains( id ) )
+        {
+            return true;
+        }
+
+        if ( shadedGroupFilter != null && !artifact.getGroupId().startsWith( shadedGroupFilter ) )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    private Set excludedArtifacts()
+    {
+        if ( artifactSet != null && artifactSet.getExcludes() != null )
+        {
+            return artifactSet.getExcludes();
+        }
+        
+        return Collections.EMPTY_SET;
+    }
+
+    private Set includedArtifacts()
+    {
+        if ( artifactSet != null && artifactSet.getIncludes() != null )
+        {
+            return artifactSet.getIncludes();
+        }
+
+        return Collections.EMPTY_SET;
+    }
+
+    private List getRelocators()
+    {
+        List relocators = new ArrayList();
+
+        if ( relocations == null )
+        {
+            return relocators;
+        }
+
+        for ( int i = 0; i < relocations.length; i++ )
+        {
+            PackageRelocation r = relocations[i];
+
+            if ( r.getExcludes() != null )
+            {
+                relocators.add( new SimpleRelocator( r.getPattern(), r.getExcludes() ) );
+            }
+            else
+            {
+                relocators.add( new SimpleRelocator( r.getPattern(), null ) );
+            }
+        }
+        return relocators;
+    }
+
+    private List getResourceTrasformers()
+    {
+        if ( transformers == null )
+        {
+            return Collections.EMPTY_LIST;
+        }
+
+        return Arrays.asList( transformers );
+    }
+
+    private File shadedArtifactFileWithClassifier()
+    {
+        Artifact artifact = project.getArtifact();
+        final String shadedName =
+            shadedArtifactId + "-" + artifact.getVersion() + "-" + shadedClassifierName + "." + artifact.getType();
+        return new File( outputDirectory, shadedName );
+    }
+
+    private File shadedArtifactFile()
+    {
+        Artifact artifact = project.getArtifact();
+        final String shadedName = shadedArtifactId + "-" + artifact.getVersion() + "." + artifact.getType();
+        return new File( outputDirectory, shadedName );
+    }
+
+    protected MavenProject getProject()
+    {
+        if ( project.getExecutionProject() != null )
+        {
+            return project.getExecutionProject();
+        }
+        else
+        {
+            return project;
+        }
+    }
+
+    // We need to find the direct dependencies that have been included in the uber JAR so that we can modify the
+    // POM accordingly.
+    private void createDependencyReducedPom( Set artifactsToRemove )
+        throws IOException
+    {
+        Model model = getProject().getOriginalModel();
+
+        List dependencies = new ArrayList();
+
+        for ( Iterator i = model.getDependencies().iterator(); i.hasNext(); )
+        {
+            Dependency d = (Dependency) i.next();
+
+            String id = d.getGroupId() + ":" + d.getArtifactId();
+
+            if ( !artifactsToRemove.contains( id ) )
+            {
+                dependencies.add( d );
+            }
+        }
+
+        // Check to see if we have a reduction and if so rewrite the POM.
+        if ( dependencies.size() < model.getDependencies().size() )
+        {
+            model.setDependencies( dependencies );
+
+            File f = new File( getProject().getFile().getParentFile(), "dependency-reduced-pom.xml" );
+
+            f.deleteOnExit();
+
+            Writer w = new FileWriter( f );
+
+            PomWriter.write( w, model, true );
+
+            w.close();
+
+            getProject().setFile( f );
+        }
+    }
+
+    private String getId( Artifact artifact )
+    {
+        return artifact.getGroupId() + ":" + artifact.getArtifactId();
+    }
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/mojo/ShadeMojo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"