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"