You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by bi...@apache.org on 2012/05/28 03:15:51 UTC
svn commit: r1343123 - in /maven/plugins/trunk/maven-shade-plugin/src:
it/mini-jar-malformed-dependencies/
it/mini-jar-malformed-dependencies/pom.xml
main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
Author: bimargulies
Date: Mon May 28 01:15:51 2012
New Revision: 1343123
URL: http://svn.apache.org/viewvc?rev=1343123&view=rev
Log:
MSHADE-107: ArrayIndexOutOfBoundsException when using minimizeJar with shade plugin
o accepted patch that improved the diagnostics for bad dependencies.
Added:
maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/
maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/pom.xml
Modified:
maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
Added: maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/pom.xml?rev=1343123&view=auto
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/pom.xml (added)
+++ maven/plugins/trunk/maven-shade-plugin/src/it/mini-jar-malformed-dependencies/pom.xml Mon May 28 01:15:51 2012
@@ -0,0 +1,45 @@
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.shade</groupId>
+ <artifactId>mini-jar-malformed-dependencies-MSHADE-107</artifactId>
+ <version>1</version>
+ <name>mini-jar-malformed-dependencies-MSHADE-107</name>
+
+ <dependencies>
+ <!-- dependencies with "malformed classes" that break asm's ClassReader -->
+ <!-- see also http://jira.codehaus.org/browse/MANIMALSNIFFER-9 -->
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ibm.icu</groupId>
+ <artifactId>icu4j</artifactId>
+ <version>2.6.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>@project.version@</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <minimizeJar>true</minimizeJar>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Modified: maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java?rev=1343123&r1=1343122&r2=1343123&view=diff
==============================================================================
--- maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java (original)
+++ maven/plugins/trunk/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java Mon May 28 01:15:51 2012
@@ -19,14 +19,6 @@ package org.apache.maven.plugins.shade.f
* under the License.
*/
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.IOUtil;
-import org.vafer.jdependency.Clazz;
-import org.vafer.jdependency.Clazzpath;
-import org.vafer.jdependency.ClazzpathUnit;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -37,6 +29,14 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.IOUtil;
+import org.vafer.jdependency.Clazz;
+import org.vafer.jdependency.Clazzpath;
+import org.vafer.jdependency.ClazzpathUnit;
+
/**
* A filter that prevents the inclusion of classes not required in the final jar.
*
@@ -48,7 +48,7 @@ public class MinijarFilter
private Log log;
- private Set removable;
+ private Set<Clazz> removable;
private int classesKept;
@@ -64,6 +64,7 @@ public class MinijarFilter
*
* @since 1.6
*/
+ @SuppressWarnings( { "unchecked", "rawtypes" } )
public MinijarFilter( MavenProject project, Log log, List<SimpleFilter> simpleFilters )
throws IOException
{
@@ -78,17 +79,7 @@ public class MinijarFilter
for ( Iterator it = project.getArtifacts().iterator(); it.hasNext(); )
{
Artifact dependency = (Artifact) it.next();
-
- InputStream is = null;
- try
- {
- is = new FileInputStream( dependency.getFile() );
- cp.addClazzpathUnit( is, dependency.toString() );
- }
- finally
- {
- IOUtil.close( is );
- }
+ addDependencyToClasspath( cp, dependency );
}
removable = cp.getClazzes();
@@ -100,14 +91,37 @@ public class MinijarFilter
: simpleFilters );
}
+ private ClazzpathUnit addDependencyToClasspath( Clazzpath cp, Artifact dependency ) throws IOException
+ {
+ InputStream is = null;
+ ClazzpathUnit clazzpathUnit = null;
+ try
+ {
+ is = new FileInputStream( dependency.getFile() );
+ clazzpathUnit = cp.addClazzpathUnit( is, dependency.toString() );
+ }
+ catch( ArrayIndexOutOfBoundsException e )
+ {
+ //trap ArrayIndexOutOfBoundsExceptions caused by malformed dependency classes (MSHADE-107)
+ log.warn( dependency.toString() + " could not be analyzed for minimization; dependency is probably malformed." );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+
+ return clazzpathUnit;
+ }
+
private void removePackages( ClazzpathUnit artifactUnit )
{
- Set packageNames = new HashSet();
+ Set<String> packageNames = new HashSet<String>();
removePackages( artifactUnit.getClazzes(), packageNames );
removePackages( artifactUnit.getTransitiveDependencies(), packageNames );
}
- private void removePackages( Set clazzes, Set packageNames )
+ @SuppressWarnings( "rawtypes" )
+ private void removePackages( Set clazzes, Set<String> packageNames )
{
Iterator it = clazzes.iterator();
while ( it.hasNext() )
@@ -125,6 +139,7 @@ public class MinijarFilter
}
}
+ @SuppressWarnings( "rawtypes" )
private void removeSpecificallyIncludedClasses( MavenProject project, List<SimpleFilter> simpleFilters )
throws IOException
{
@@ -140,18 +155,7 @@ public class MinijarFilter
SimpleFilter simpleFilter = i.next();
if ( simpleFilter.canFilter( jar ) )
{
- InputStream is = null;
- ClazzpathUnit depClazzpathUnit = null;
- try
- {
- is = new FileInputStream( dependency.getFile() );
- depClazzpathUnit = checkCp.addClazzpathUnit( is, dependency.toString() );
- }
- finally
- {
- IOUtil.close( is );
- }
-
+ ClazzpathUnit depClazzpathUnit = addDependencyToClasspath( checkCp, dependency );
if ( depClazzpathUnit != null )
{
Iterator<Clazz> j = removable.iterator();