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 [3/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...

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/PomWriter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/PomWriter.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/PomWriter.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/pom/PomWriter.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,59 @@
+package org.codehaus.mojo.shade.pom;
+
+import org.apache.maven.model.Model;
+import org.jdom.Document;
+import org.jdom.Namespace;
+import org.jdom.Element;
+import org.jdom.output.Format;
+import org.codehaus.mojo.shade.pom.MavenJDOMWriter;
+
+import java.io.Writer;
+import java.io.IOException;
+
+/** @author Jason van Zyl */
+public class PomWriter
+{
+    public static void write( Writer w,
+                              Model newModel )
+        throws IOException
+        {
+        write( w, newModel, false );
+    }
+
+    public static void write( Writer w,
+                              Model newModel,
+                              boolean namespaceDeclaration )
+        throws IOException
+    {
+        Element root = new Element( "project" );
+
+        if ( namespaceDeclaration )
+        {
+            String modelVersion = newModel.getModelVersion();
+
+            Namespace pomNamespace = Namespace.getNamespace( "", "http://maven.apache.org/POM/" + modelVersion );
+
+            root.setNamespace( pomNamespace );
+
+            Namespace xsiNamespace = Namespace.getNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
+
+            root.addNamespaceDeclaration( xsiNamespace );
+
+            if ( root.getAttribute( "schemaLocation", xsiNamespace ) == null )
+            {
+                root.setAttribute( "schemaLocation", "http://maven.apache.org/POM/" + modelVersion +
+                    " http://maven.apache.org/maven-v" + modelVersion.replace( '.', '_' ) + ".xsd", xsiNamespace );
+            }
+        }
+
+        Document doc = new Document( root );
+
+        MavenJDOMWriter writer = new MavenJDOMWriter();
+
+        String encoding = newModel.getModelEncoding() != null ? newModel.getModelEncoding() : "UTF-8";
+
+        Format format = Format.getPrettyFormat().setEncoding( encoding );
+
+        writer.write( newModel, doc, w, format );
+    }    
+}

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

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

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

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/SimpleRelocator.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/SimpleRelocator.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/SimpleRelocator.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/relocation/SimpleRelocator.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,60 @@
+package org.codehaus.mojo.shade.relocation;
+
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+/** @author Jason van Zyl */
+public class SimpleRelocator
+    implements Relocator
+{
+    private String pattern;
+
+    private List excludes;
+
+    public SimpleRelocator( String pattern,
+                            List excludes )
+    {
+        this.pattern = pattern.replace( '.', '/' );
+
+        if ( excludes != null )
+        {
+            this.excludes = new ArrayList();
+
+            for ( Iterator i = excludes.iterator(); i.hasNext(); )
+            {
+                String e = (String) i.next();
+
+                this.excludes.add( e.replace( '.', '/' ) );
+            }
+        }
+    }
+
+    public boolean canRelocate( String clazz )
+    {
+        if ( excludes != null )
+        {
+            for ( Iterator i = excludes.iterator(); i.hasNext(); )
+            {
+                String exclude = (String) i.next();
+
+                // Remember we have converted "." -> "/" in the constructor. So ".*" is really "/*"
+                if ( exclude.endsWith( "/*" ) && clazz.startsWith( exclude.substring( 0, exclude.length() - 2 ) ) )
+                {
+                    return false;
+                }
+                else if ( clazz.equals( exclude ) )
+                {
+                    return false;
+                }
+            }
+        }
+
+        return clazz.startsWith( pattern );
+    }
+
+    public String relocate( String clazz )
+    {
+        return "hidden/" + clazz;
+    }
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,45 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.jar.JarOutputStream;
+
+/**
+ * Prevents duplicate copies of the license
+ *
+ */
+public class ApacheLicenseResourceTransformer
+    implements ResourceTransformer
+{
+    Set entries = new HashSet();
+    
+    public boolean canTransformResource( String resource )
+    {
+        String s = resource.toLowerCase();
+
+        if ( s.startsWith( "meta-inf/license.txt" ) || s.equals( "meta-inf/license" ))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void processResource( InputStream is )
+        throws IOException
+    {
+       
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return false;
+    }
+
+    public void modifyOutputStream( JarOutputStream os )
+        throws IOException
+    {
+    }
+}

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

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheLicenseResourceTransformer.java
------------------------------------------------------------------------------
    svn:executable = *

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheNoticeResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheNoticeResourceTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheNoticeResourceTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ApacheNoticeResourceTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,101 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+public class ApacheNoticeResourceTransformer
+    implements ResourceTransformer
+{
+    Set entries = new HashSet();
+    String projectName;
+    
+    String preamble1 = 
+          "// ------------------------------------------------------------------\n"
+        + "// NOTICE file corresponding to the section 4d of The Apache License,\n"
+        + "// Version 2.0, in this case for ";
+    
+    String preamble2 = "\n// ------------------------------------------------------------------\n\n";
+        
+    String preamble3 = "This product includes software developed at\n" +
+        "Apache Software Foundation (http://www.apache.org/).\n";
+
+    String copyright;
+    
+    public boolean canTransformResource( String resource )
+    {
+        String s = resource.toLowerCase();
+
+        if (s.equals( "meta-inf/notice.txt" ) || s.equals( "meta-inf/notice" ) )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void processResource( InputStream is )
+        throws IOException
+    {
+        copyright = projectName + "\nCopyright 2006-2007 Apache Software Foundation\n";
+        
+        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+        
+        String line = reader.readLine();
+        StringBuffer sb = new StringBuffer();
+        while (line != null) {
+            line = line.trim();
+            
+            if (!line.startsWith("//")) {
+                if (line.length() > 0) {
+                    sb.append(line).append("\n");
+                } else {
+                    entries.add(sb.toString());
+                    sb = new StringBuffer();
+                }
+            }
+            
+            line = reader.readLine();
+        }
+        
+        entries.remove(preamble3);
+        entries.remove(copyright);
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return true;
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        jos.putNextEntry( new JarEntry( "META-INF/NOTICE" ) );
+        
+        OutputStreamWriter writer = new OutputStreamWriter(jos);
+        writer.write(preamble1);
+        writer.write(projectName);
+        writer.write(preamble2);
+        
+        writer.write(copyright);
+        writer.write("\n");
+        
+        writer.write(preamble3);
+        writer.write("\n");
+        
+        for (Iterator itr = entries.iterator(); itr.hasNext();) {
+            String line = (String) itr.next();
+            writer.append(line);
+            writer.append('\n');
+        }
+        
+        writer.flush();
+    }
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,51 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.codehaus.plexus.util.IOUtil;
+
+public class AppendingTransformer
+    implements ResourceTransformer
+{
+    String resource;
+    ByteArrayOutputStream data = new ByteArrayOutputStream();
+    
+    public boolean canTransformResource( String r )
+    {
+        r = r.toLowerCase();
+
+        if (resource != null && resource.toLowerCase().equals(r))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void processResource( InputStream is )
+        throws IOException
+    {
+        IOUtil.copy(is, data);
+        data.write('\n');
+        
+        is.close();
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return true;
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        jos.putNextEntry( new JarEntry( resource ) );
+        
+        IOUtil.copy(new ByteArrayInputStream(data.toByteArray()), jos);
+    }
+}

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

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/AppendingTransformer.java
------------------------------------------------------------------------------
    svn:executable = *

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ComponentsXmlResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ComponentsXmlResourceTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ComponentsXmlResourceTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ComponentsXmlResourceTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,140 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+
+// 1. We want to process all resources that are common in all the JARs that we are processing.
+// 2. At the end of processing we want to hand back the transformation of the resources.
+
+// In my particular case I want to grab all the plexus components.xml files and aggregate them
+// and then stick them in one place in the aggregated JAR.
+
+public class ComponentsXmlResourceTransformer
+    implements ResourceTransformer
+{
+    private Map components = new LinkedHashMap();
+
+    public static final String COMPONENTS_XML_PATH = "META-INF/plexus/components.xml";
+
+    public boolean canTransformResource( String resource )
+    {
+        return COMPONENTS_XML_PATH.equals( resource );
+    }
+
+    public void processResource( InputStream is )
+        throws IOException
+    {
+        // We can't just read the stream because the plexus dom builder closes the stream
+
+        File f = File.createTempFile( "maven-shade-plugin", "tmp" );
+
+        f.deleteOnExit();
+        
+        String n = f.getAbsolutePath();
+
+        OutputStream os = new FileOutputStream( f );
+
+        IOUtil.copy( is, os );
+
+        os.close();
+
+        //
+
+        Reader reader;
+
+        Xpp3Dom newDom;
+
+        try
+        {
+            reader = new FileReader( n );
+
+            newDom = Xpp3DomBuilder.build( reader );
+        }
+        catch ( Exception e )
+        {
+            throw new IOException( "Error parsing components.xml in " + is );
+        }
+
+        Xpp3Dom[] children = newDom.getChild( "components" ).getChildren( "component" );
+
+        for ( int i = 0; i < children.length; i++ )
+        {
+            Xpp3Dom component = children[i];
+
+            String role = component.getChild( "role" ).getValue();
+
+            Xpp3Dom child = component.getChild( "role-hint" );
+
+            String roleHint = child != null ? child.getValue() : "";
+
+            components.put( role + roleHint, component );
+        }
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        Reader reader = new FileReader( getTransformedResource() );
+
+        jos.putNextEntry( new JarEntry( COMPONENTS_XML_PATH ) );
+
+        IOUtil.copy( reader, jos );
+
+        reader.close();
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return components.size() > 0;
+    }
+
+    public File getTransformedResource()
+        throws IOException
+    {
+        File f = File.createTempFile( "shade-maven-plugin-plx", "tmp" );
+
+        f.deleteOnExit();
+
+        FileWriter fileWriter = new FileWriter( f );
+        try
+        {
+            Xpp3Dom dom = new Xpp3Dom( "component-set" );
+
+            Xpp3Dom componentDom = new Xpp3Dom( "components" );
+
+            dom.addChild( componentDom );
+
+            for ( Iterator i = components.values().iterator(); i.hasNext(); )
+            {
+                Xpp3Dom component = (Xpp3Dom) i.next();
+                componentDom.addChild( component );
+            }
+
+            Xpp3DomWriter.write( fileWriter, dom );
+        }
+        finally
+        {
+            IOUtil.close( fileWriter );
+        }
+
+        return f;
+    }
+
+
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ResourceTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ResourceTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ResourceTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/ResourceTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,19 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.jar.JarOutputStream;
+
+/** @author Jason van Zyl */
+public interface ResourceTransformer
+{
+    boolean canTransformResource( String resource );
+
+    void processResource( InputStream is )
+        throws IOException;
+    
+    boolean hasTransformedResource();
+
+    void modifyOutputStream( JarOutputStream os )
+        throws IOException;
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,94 @@
+package org.codehaus.mojo.shade.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.jdom.Attribute;
+import org.jdom.Content;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+
+public class XmlAppendingTransformer
+    implements ResourceTransformer
+{
+    public static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance";
+    
+    String resource;
+    Document doc;
+    
+    public boolean canTransformResource( String r )
+    {
+        r = r.toLowerCase();
+
+        if (resource != null && resource.toLowerCase().equals(r))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void processResource( InputStream is )
+        throws IOException
+    {
+        Document r;
+        try 
+        {
+            r = new SAXBuilder().build(is);
+        } 
+        catch (JDOMException e) 
+        {
+            throw new RuntimeException(e);
+        }
+        
+        if (doc == null) 
+        {
+            doc = r;
+        } 
+        else 
+        {
+            Element root = r.getRootElement();
+            
+            for (Iterator itr = root.getAttributes().iterator(); itr.hasNext();)
+            {
+                Attribute a = (Attribute) itr.next();
+                itr.remove();
+                
+                Element mergedEl = doc.getRootElement();
+                Attribute mergedAtt = mergedEl.getAttribute(a.getName(), a.getNamespace());
+                if (mergedAtt == null) 
+                {
+                    mergedEl.setAttribute(a);
+                }
+            }
+            
+            for (Iterator itr = root.getChildren().iterator(); itr.hasNext();)
+            {
+                Content n = (Content) itr.next();
+                itr.remove();
+                
+                doc.getRootElement().addContent(n);
+            }
+        }
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return true;
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        jos.putNextEntry( new JarEntry( resource ) );
+        
+        new XMLOutputter(Format.getPrettyFormat()).output(doc, jos);
+    }
+}

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

Propchange: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/codehaus/mojo/shade/resource/XmlAppendingTransformer.java
------------------------------------------------------------------------------
    svn:executable = *

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/jars/plexus-utils-1.4.1.jar
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/jars/plexus-utils-1.4.1.jar?view=auto&rev=553938
==============================================================================
Binary file - no diff available.

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/jars/plexus-utils-1.4.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-project-1.0-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-project-1.0-SNAPSHOT.jar?view=auto&rev=553938
==============================================================================
Binary file - no diff available.

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/jars/test-project-1.0-SNAPSHOT.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/ShadeMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/ShadeMojoTest.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/ShadeMojoTest.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/java/org/codehaus/mojo/shade/ShadeMojoTest.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,44 @@
+package org.codehaus.mojo.shade;
+
+import org.codehaus.mojo.shade.Shader;
+import org.codehaus.mojo.shade.relocation.SimpleRelocator;
+import org.codehaus.mojo.shade.resource.ComponentsXmlResourceTransformer;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.io.File;
+
+
+/** @author Jason van Zyl */
+public class ShadeMojoTest
+    extends PlexusTestCase
+{
+    public void testShader()
+        throws Exception
+    {
+        Shader s = (Shader) lookup( Shader.ROLE );
+
+        Set set = new HashSet();
+
+        set.add( new File( getBasedir(), "src/test/jars/test-project-1.0-SNAPSHOT.jar" ) );
+
+        set.add( new File( getBasedir(), "src/test/jars/plexus-utils-1.4.1.jar" ) );
+
+        File jar = new File( "target/foo.jar" );
+
+        List relocators = new ArrayList();
+
+        relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", Arrays.asList(
+            new String[]{"org/codehaus/plexus/util/xml/Xpp3Dom", "org/codehaus/plexus/util/xml/pull.*"} ) ) );
+
+        List resourceTransformers = new ArrayList();
+
+        resourceTransformers.add( new ComponentsXmlResourceTransformer() );
+
+        s.shade( set, jar, relocators, resourceTransformers );
+    }
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,35 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>default-config-project</artifactId>
+  <name>default-config-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.shade</groupId>
+      <artifactId>test-project</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>shade-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/default-config-project/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,46 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>no-relocation-project</artifactId>
+  <name>no-relocation-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.shade</groupId>
+      <artifactId>test-project</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>shade-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <artifactSet>
+                <excludes>
+                  <exclude>classworlds:classworlds</exclude>
+                  <exclude>junit:junit</exclude>
+                  <exclude>jmock:jmock</exclude>
+                  <exclude>xml-apis:xml-apis</exclude>
+                </excludes>
+              </artifactSet>
+              <transformers>
+                <transformer implementation="org.codehaus.mojo.shade.resource.ComponentsXmlResourceTransformer"/>
+              </transformers>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/no-relocation-project/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,17 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>projects-parent</artifactId>
+  <name>projects-parent</name>
+  <packaging>pom</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <modules>
+    <module>test-project</module>
+    <module>no-relocation-project</module>
+    <module>shaded-project</module>
+    <module>shaded-renamed-project</module>
+    <module>shaded-attached-project</module>
+  </modules>
+</project>

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,58 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>shaded-attached-project</artifactId>
+  <name>shaded-attached-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.shade</groupId>
+      <artifactId>test-project</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>shade-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedArtifactId>shaded-artifact</shadedArtifactId>
+              <shadedArtifactAttached>true</shadedArtifactAttached>
+              <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
+              <artifactSet>
+                <excludes>
+                  <exclude>classworlds:classworlds</exclude>
+                  <exclude>junit:junit</exclude>
+                  <exclude>jmock:jmock</exclude>
+                  <exclude>xml-apis:xml-apis</exclude>
+                </excludes>
+              </artifactSet>
+              <relocations>
+                <relocation>
+                  <pattern>org.codehaus.plexus.util</pattern>
+                  <excludes>
+                    <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
+                    <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
+                  </excludes>
+                </relocation>
+              </relocations>
+              <transformers>
+                <transformer implementation="org.codehaus.mojo.shade.resource.ComponentsXmlResourceTransformer"/>
+              </transformers>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-attached-project/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,55 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>shaded-project</artifactId>
+  <name>shaded-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.shade</groupId>
+      <artifactId>test-project</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>shade-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <artifactSet>
+                <excludes>
+                  <exclude>classworlds:classworlds</exclude>
+                  <exclude>junit:junit</exclude>
+                  <exclude>jmock:jmock</exclude>
+                  <exclude>xml-apis:xml-apis</exclude>
+                </excludes>
+              </artifactSet>
+              <relocations>
+                <relocation>
+                  <pattern>org.codehaus.plexus.util</pattern>
+                  <excludes>
+                    <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
+                    <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
+                  </excludes>
+                </relocation>
+              </relocations>
+              <transformers>
+                <transformer implementation="org.codehaus.mojo.shade.resource.ComponentsXmlResourceTransformer"/>
+              </transformers>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-project/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,53 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>shaded-renamed-project</artifactId>
+  <name>shaded-renamed-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.shade</groupId>
+      <artifactId>test-project</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>shade-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedArtifactId>renamed-artifact</shadedArtifactId>
+              <artifactSet>
+                <excludes>
+                  <exclude>classworlds:classworlds</exclude>
+                  <exclude>junit:junit</exclude>
+                  <exclude>jmock:jmock</exclude>
+                  <exclude>xml-apis:xml-apis</exclude>
+                </excludes>
+              </artifactSet>
+              <relocations>
+                <relocation>
+                  <pattern>org.codehaus.plexus.util</pattern>
+                  <excludes>
+                    <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
+                    <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
+                  </excludes>
+                </relocation>
+              </relocations>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/shaded-renamed-project/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/pom.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,23 @@
+<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>
+  <groupId>org.codehaus.mojo.shade</groupId>
+  <artifactId>test-project</artifactId>
+  <name>test-project</name>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <url>http://mojo.codehaus.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.4.1</version>
+    </dependency>  
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/App.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/App.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/App.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/java/org/codehaus/mojo/shade/App.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,17 @@
+package org.codehaus.mojo.shade;
+
+import org.codehaus.plexus.util.*;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+
+        StringUtils.isEmpty( "foo" );
+    }
+}

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

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

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml Fri Jul  6 09:03:52 2007
@@ -0,0 +1,209 @@
+<!--
+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.
+-->
+
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout</role>
+      <role-hint>default</role-hint>
+      <implementation>org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout</implementation>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout</role>
+      <role-hint>legacy</role-hint>
+      <implementation>org.apache.maven.artifact.repository.layout.LegacyRepositoryLayout</implementation>
+    </component>
+
+    <!--
+     |
+     | ArtifactHandlerManager
+     |
+     -->
+    <component>
+      <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
+      <implementation>org.apache.maven.artifact.handler.manager.DefaultArtifactHandlerManager</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+          <field-name>artifactHandlers</field-name>
+        </requirement>
+      </requirements>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>ejb</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>ejb</type>
+        <extension>jar</extension>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>jar</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>jar</type>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>test-jar</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <classifier>tests</classifier>
+        <extension>jar</extension>
+        <type>test-jar</type>
+        <packaging>jar</packaging>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>maven-plugin</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>maven-plugin</type>
+        <extension>jar</extension>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>pom</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>pom</type>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>java-source</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <classifier>sources</classifier>
+        <type>java-source</type>
+        <extension>jar</extension>
+        <language>java</language>
+        <addedToClasspath>false</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>javadoc</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <classifier>javadoc</classifier>
+        <type>javadoc</type>
+        <extension>jar</extension>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>war</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>war</type>
+        <includesDependencies>true</includesDependencies>
+        <language>java</language>
+        <addedToClasspath>false</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>ear</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>ear</type>
+        <includesDependencies>true</includesDependencies>
+        <language>java</language>
+        <addedToClasspath>false</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>ejb-client</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>ejb-client</type>
+        <extension>jar</extension>
+        <packaging>ejb</packaging>
+        <classifier>client</classifier>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>par</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>par</type>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>ejb3</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <type>ejb3</type>
+        <language>java</language>
+        <addedToClasspath>true</addedToClasspath>
+      </configuration>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+      <implementation>org.apache.maven.artifact.factory.DefaultArtifactFactory</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.artifact.handler.manager.ArtifactHandlerManager</role>
+        </requirement>
+      </requirements>
+    </component>
+
+    <component>
+      <role>org.apache.maven.artifact.resolver.ArtifactCollector</role>
+      <implementation>org.apache.maven.artifact.resolver.DefaultArtifactCollector</implementation>
+    </component>
+  </components>
+</component-set>

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java Fri Jul  6 09:03:52 2007
@@ -0,0 +1,38 @@
+package org.codehaus.mojo.shade;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/src/test/projects/test-project/src/test/java/org/codehaus/mojo/shade/AppTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-shade-plugin/static-remapper.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/static-remapper.txt?view=auto&rev=553938
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/static-remapper.txt (added)
+++ maven/plugins/trunk/maven-shade-plugin/static-remapper.txt Fri Jul  6 09:03:52 2007
@@ -0,0 +1,62 @@
+    /*
+    ClassVisitor cv = null;
+    Remapper remapper = null;
+
+    RemappingClassAdapter a = new RemappingClassAdapter( cv, remapper )
+    {
+        protected MethodVisitor createRemappingMethodAdapter( int access,
+                                                              String newDesc,
+                                                              MethodVisitor mv )
+        {
+            final MethodVisitor rmv = super.createRemappingMethodAdapter( access, newDesc, mv );
+            return new MethodNode()
+            {
+                public void visitEnd()
+                {
+                    Analyzer an = new Analyzer( new SourceInterpreter() );
+                    try
+                    {
+                        Frame[] frames = an.analyze( className, this );
+                        // Elements of the frames array now contains info for each instruction
+                        // from the analyzed method.
+                        for ( int i = 0; i < frames.length; i++ )
+                        {
+                            Frame frame = frames[i];
+                            AbstractInsnNode insn = instructions.get( i );
+                            if ( insn.getOpcode() == Opcodes.INVOKEVIRTUAL )
+                            {
+                                MethodInsnNode minsn = (MethodInsnNode) insn;
+                                if ( minsn.name.equals( "getResource" ) && minsn.owner.equals( "java/lang/Class" ) )
+                                {
+                                    // now check where params come from (top of the stack)
+                                    SourceValue value = (SourceValue) frames[i].getStack( 0 );
+                                    Set sources = value.insns;  // instructions that produced this value
+                                    for ( Iterator it = sources.iterator(); it.hasNext(); )
+                                    {
+                                        AbstractInsnNode source = (AbstractInsnNode) it.next();
+                                        if ( source.getOpcode() == Opcodes.LDC )
+                                        {
+                                            LdcInsnNode constant = (LdcInsnNode) source;
+                                            // can change constant.cst value here
+                                        }
+                                        else
+                                        {
+                                            // can log something about value that came not from the constant
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        // got your mapping. can remap now. replaying recorded method
+                        accept( rmv );
+                    }
+                    catch ( AnalyzerException ex )
+                    {
+                        // TODO Auto-generated catch block
+                        ex.printStackTrace();
+                    }
+                }
+            };
+        }
+    };
+    */
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-shade-plugin/static-remapper.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-shade-plugin/static-remapper.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"