From a40d2b5bf749cd39d6154f9b50c5a8d373f6be97 Mon Sep 17 00:00:00 2001 From: "Zur, Aviem" Date: Fri, 10 Mar 2017 14:56:20 +0200 Subject: [PATCH 1/3] [MSHADE-253] NullPointerException if minimizeJar == true && packaging == pom --- .../plugins/shade/filter/MinijarFilter.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java b/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java index def902fad8..21fb24d8b7 100644 --- a/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java +++ b/maven-shade-plugin/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java @@ -86,25 +86,28 @@ public MinijarFilter( MavenProject project, Log log ) public MinijarFilter( MavenProject project, Log log, List simpleFilters ) throws IOException { + this.log = log; - this.log = log; + File artifactFile = project.getArtifact().getFile(); - Clazzpath cp = new Clazzpath(); + if ( artifactFile != null ) + { + Clazzpath cp = new Clazzpath(); - ClazzpathUnit artifactUnit = - cp.addClazzpathUnit( new FileInputStream( project.getArtifact().getFile() ), project.toString() ); + ClazzpathUnit artifactUnit = cp.addClazzpathUnit( new FileInputStream( artifactFile ), project.toString() ); - for ( Artifact dependency : project.getArtifacts() ) - { - addDependencyToClasspath( cp, dependency ); - } + for ( Artifact dependency : project.getArtifacts() ) + { + addDependencyToClasspath( cp, dependency ); + } - removable = cp.getClazzes(); - removePackages( artifactUnit ); - removable.removeAll( artifactUnit.getClazzes() ); - removable.removeAll( artifactUnit.getTransitiveDependencies() ); - removeSpecificallyIncludedClasses( project, simpleFilters == null ? Collections.emptyList() - : simpleFilters ); + removable = cp.getClazzes(); + removePackages( artifactUnit ); + removable.removeAll( artifactUnit.getClazzes() ); + removable.removeAll( artifactUnit.getTransitiveDependencies() ); + removeSpecificallyIncludedClasses( project, + simpleFilters == null ? Collections.emptyList() : simpleFilters ); + } } private ClazzpathUnit addDependencyToClasspath( Clazzpath cp, Artifact dependency ) @@ -214,7 +217,7 @@ public boolean isFiltered( String classFile ) String className = classFile.replace( '/', '.' ).replaceFirst( "\\.class$", "" ); Clazz clazz = new Clazz( className ); - if ( removable.contains( clazz ) ) + if ( removable != null && removable.contains( clazz ) ) { log.debug( "Removing " + className ); classesRemoved += 1; From 274d4c9add1398bf2a583465c3a87497867496cd Mon Sep 17 00:00:00 2001 From: "Zur, Aviem" Date: Mon, 27 Mar 2017 07:18:15 +0300 Subject: [PATCH 2/3] [MSHADE-253] Re-enable minimization test and add pom project test --- .../shade/filter/MinijarFilterTest.java | 130 +++++++++++++----- 1 file changed, 99 insertions(+), 31 deletions(-) diff --git a/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java b/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java index 27d3b48091..69015285b1 100644 --- a/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java +++ b/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java @@ -22,9 +22,20 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import java.io.File; +import java.io.IOException; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.plugin.logging.Log; +import org.apache.maven.project.MavenProject; +import org.junit.Before; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import org.mockito.ArgumentCaptor; import junit.framework.Assert; @@ -32,37 +43,94 @@ public class MinijarFilterTest { -// @Test -// public void theTestWhichIsTooExpensiveAtTheMoment() -// throws IOException -// { -// ArgumentCaptor logCaptor = ArgumentCaptor.forClass( CharSequence.class ); -// -// MavenProject mavenProject = mock( MavenProject.class ); -// Log log = mock( Log.class ); -// -// Artifact artifact = mock( Artifact.class ); -// when( artifact.getGroupId() ).thenReturn( "com" ); -// when( artifact.getArtifactId() ).thenReturn( "aid" ); -// when( artifact.getVersion() ).thenReturn( "1.9" ); -// when( artifact.getClassifier() ).thenReturn( "classifier1" ); -// when( artifact.getScope() ).thenReturn( Artifact.SCOPE_COMPILE ); -// -// when( mavenProject.getArtifact() ).thenReturn( artifact ); -// -// Set artifacts = new TreeSet(); -// artifacts.add( new DefaultArtifact( "dep.com", "dep.aid", "1.0", "compile", "jar", "classifier2", null ) ); -// -// when( mavenProject.getArtifacts() ).thenReturn( artifacts ); -// when( mavenProject.getArtifact().getFile() ).thenReturn( mock( File.class ) ); -// -// MinijarFilter mf = new MinijarFilter( mavenProject, log ); -// -// mf.finished(); -// verify( log, times( 1 ) ).info( logCaptor.capture() ); -// -// Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); -// } + private File emptyFile; + + @Before + public void init() throws IOException { + TemporaryFolder tempFolder = new TemporaryFolder(); + tempFolder.create(); + this.emptyFile = tempFolder.newFile(); + + } + + @Test + public void testWithMockProject() + throws IOException + { + ArgumentCaptor logCaptor = ArgumentCaptor.forClass( CharSequence.class ); + + MavenProject mavenProject = mockProject(emptyFile); + + Log log = mock( Log.class ); + + MinijarFilter mf = new MinijarFilter( mavenProject, log ); + + mf.finished(); + + verify( log, times( 1 ) ).info( logCaptor.capture() ); + + Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); + + } + + @Test + public void testWithPomProject() + throws IOException + { + ArgumentCaptor logCaptor = ArgumentCaptor.forClass( CharSequence.class ); + + // project with pom packaging and no artifact. + MavenProject mavenProject = mockProject(null); + mavenProject.setPackaging("pom"); + + Log log = mock( Log.class ); + + MinijarFilter mf = new MinijarFilter( mavenProject, log ); + + mf.finished(); + + verify( log, times( 1 ) ).info( logCaptor.capture() ); + + // verify no access to project's artifacts + verify( mavenProject, times(0) ).getArtifacts(); + + Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); + + } + + private MavenProject mockProject(File file) { + MavenProject mavenProject = mock( MavenProject.class ); + + Artifact artifact = mock( Artifact.class ); + when( artifact.getGroupId() ).thenReturn( "com" ); + when( artifact.getArtifactId() ).thenReturn( "aid" ); + when( artifact.getVersion() ).thenReturn( "1.9" ); + when( artifact.getClassifier() ).thenReturn( "classifier1" ); + when( artifact.getScope() ).thenReturn( Artifact.SCOPE_COMPILE ); + + when( mavenProject.getArtifact() ).thenReturn( artifact ); + + DefaultArtifact dependencyArtifact = + new DefaultArtifact( + "dep.com", + "dep.aid", + "1.0", + "compile", + "jar", + "classifier2", + null); + dependencyArtifact.setFile(file); + + Set artifacts = new TreeSet(); + artifacts.add( dependencyArtifact ); + + when( mavenProject.getArtifacts() ).thenReturn( artifacts ); + + when( mavenProject.getArtifact().getFile() ).thenReturn( file ); + + return mavenProject; + + } @Test public void finsishedShouldProduceMessageForClassesTotalNonZero() From f67cf5e5cc1e1022eeba870843b02abc5ff68523 Mon Sep 17 00:00:00 2001 From: "Zur, Aviem" Date: Mon, 27 Mar 2017 07:20:23 +0300 Subject: [PATCH 3/3] [MSHADE-253] Replace deprecated assertions in test. --- .../plugins/shade/filter/MinijarFilterTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java b/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java index 69015285b1..823c389bfb 100644 --- a/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java +++ b/maven-shade-plugin/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java @@ -19,6 +19,8 @@ * under the License. */ +import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -38,8 +40,6 @@ import org.junit.rules.TemporaryFolder; import org.mockito.ArgumentCaptor; -import junit.framework.Assert; - public class MinijarFilterTest { @@ -69,7 +69,7 @@ public void testWithMockProject() verify( log, times( 1 ) ).info( logCaptor.capture() ); - Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); + assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); } @@ -94,7 +94,7 @@ public void testWithPomProject() // verify no access to project's artifacts verify( mavenProject, times(0) ).getArtifacts(); - Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); + assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); } @@ -145,7 +145,7 @@ public void finsishedShouldProduceMessageForClassesTotalNonZero() verify( log, times( 1 ) ).info( logCaptor.capture() ); - Assert.assertEquals( "Minimized 51 -> 1 (1%)", logCaptor.getValue() ); + assertEquals( "Minimized 51 -> 1 (1%)", logCaptor.getValue() ); } @@ -162,7 +162,7 @@ public void finsishedShouldProduceMessageForClassesTotalZero() verify( log, times( 1 ) ).info( logCaptor.capture() ); - Assert.assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); + assertEquals( "Minimized 0 -> 0", logCaptor.getValue() ); } }