This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new fa5e40d [MSHADE-389] Get rid of old baggage
fa5e40d is described below
commit fa5e40dc59355163d89cd904fcf4c4724ba3d3d6
Author: Tamas Cservenak <[email protected]>
AuthorDate: Fri May 21 09:33:16 2021 +0200
[MSHADE-389] Get rid of old baggage
https://issues.apache.org/jira/browse/MSHADE-389
Changes:
* get rid of Plexus Container et al (container, annotations,
AbstractLogEnabled, etc)
* get rid of use of Guava (only Multimap was used from it, use
commons-collections4 instead)
* up to Maven 3.1.x
* Note: UTs are still using PlexusTestCase as Maven 3.1.x has no SISU index
---
pom.xml | 115 +++++++++---
.../apache/maven/plugins/shade/DefaultShader.java | 75 ++++----
.../org/apache/maven/plugins/shade/Shader.java | 2 -
.../apache/maven/plugins/shade/mojo/ShadeMojo.java | 33 ++--
.../maven/plugins/shade/DefaultShaderTest.java | 193 +++++++++------------
.../org/apache/maven/plugins/shade/MockShader.java | 7 +-
.../maven/plugins/shade/mojo/ShadeMojoTest.java | 13 +-
7 files changed, 241 insertions(+), 197 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5e48386..ec4dba7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,8 +65,9 @@
</distributionManagement>
<properties>
- <mavenVersion>3.0</mavenVersion>
+ <mavenVersion>3.1.1</mavenVersion>
<javaVersion>7</javaVersion>
+ <sisu.version>0.3.4</sisu.version>
<currentVersion>${project.version}</currentVersion>
<asmVersion>9.1</asmVersion>
<project.build.outputTimestamp>2020-05-23T15:29:40Z</project.build.outputTimestamp>
@@ -90,27 +91,51 @@
</contributor>
</contributors>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.inject</artifactId>
+ <version>${sisu.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ <version>${sisu.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <version>3.2.6</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
<dependencies>
<!-- Maven -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>${mavenVersion}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>${mavenVersion}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${mavenVersion}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>${mavenVersion}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
@@ -125,13 +150,33 @@
<version>3.3.0</version>
</dependency>
+ <!-- DI -->
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ <scope>provided</scope>
+ </dependency>
+
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-artifact-transfer</artifactId>
<version>0.13.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-inject-plexus</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
+
<!-- Others -->
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.30</version>
+ </dependency>
+ <dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>${asmVersion}</version>
@@ -163,37 +208,46 @@
<version>2.6.0</version>
</dependency>
<dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-component-annotations</artifactId>
- <scope>provided</scope>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-collections4</artifactId>
+ <version>4.2</version>
</dependency>
+ <!-- Test -->
+ <!-- Used by: TransformerTesterRule only -->
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
-
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-legacy</artifactId>
<version>2.7.0</version>
<scope>test</scope>
</dependency>
-
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>30.0-android</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.8.1</version>
- </dependency>
-
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
@@ -244,21 +298,26 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
+ <version>${sisu.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>main-index</goal>
+ <goal>test-index</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-component-metadata</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>generate-metadata</goal>
- <goal>generate-test-metadata</goal>
- </goals>
- </execution>
- </executions>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
diff --git a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
index d5c19c3..9226e3b 100644
--- a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
+++ b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
@@ -38,6 +38,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Objects;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -48,6 +49,11 @@ import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.multimap.HashSetValuedHashMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.shade.filter.Filter;
@@ -55,28 +61,37 @@ import org.apache.maven.plugins.shade.relocation.Relocator;
import org.apache.maven.plugins.shade.resource.ManifestResourceTransformer;
import org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer;
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
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.ClassRemapper;
import org.objectweb.asm.commons.Remapper;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @author Jason van Zyl
*/
-@Component( role = Shader.class, hint = "default" )
+@Singleton
+@Named
public class DefaultShader
- extends AbstractLogEnabled
implements Shader
{
private static final int BUFFER_SIZE = 32 * 1024;
+ private final Logger logger;
+
+ public DefaultShader()
+ {
+ this( LoggerFactory.getLogger( DefaultShader.class ) );
+ }
+
+ public DefaultShader( final Logger logger )
+ {
+ this.logger = Objects.requireNonNull( logger );
+ }
+
public void shade( ShadeRequest shadeRequest )
throws IOException, MojoExecutionException
{
@@ -106,13 +121,13 @@ public class DefaultShader
goThroughAllJarEntriesForManifestTransformer( shadeRequest,
resources, manifestTransformer, out );
// CHECKSTYLE_OFF: MagicNumber
- Multimap<String, File> duplicates = HashMultimap.create( 10000, 3
);
+ MultiValuedMap<String, File> duplicates = new
HashSetValuedHashMap<>( 10000, 3 );
// CHECKSTYLE_ON: MagicNumber
shadeJars( shadeRequest, resources, transformers, remapper, out,
duplicates );
// CHECKSTYLE_OFF: MagicNumber
- Multimap<Collection<File>, String> overlapping =
HashMultimap.create( 20, 15 );
+ MultiValuedMap<Collection<File>, String> overlapping = new
HashSetValuedHashMap<>( 20, 15 );
// CHECKSTYLE_ON: MagicNumber
for ( String clazz : duplicates.keySet() )
@@ -207,13 +222,13 @@ public class DefaultShader
}
private void shadeJars( ShadeRequest shadeRequest, Set<String> resources,
List<ResourceTransformer> transformers,
- RelocatorRemapper remapper, JarOutputStream jos,
Multimap<String, File> duplicates )
+ RelocatorRemapper remapper, JarOutputStream jos,
MultiValuedMap<String, File> duplicates )
throws IOException, MojoExecutionException
{
for ( File jar : shadeRequest.getJars() )
{
- getLogger().debug( "Processing JAR " + jar );
+ logger.debug( "Processing JAR " + jar );
List<Filter> jarFilters = getFilters( jar,
shadeRequest.getFilters() );
@@ -242,7 +257,7 @@ public class DefaultShader
if ( "module-info.class".equals( name ) )
{
- getLogger().warn( "Discovered module-info.class. "
+ logger.warn( "Discovered module-info.class. "
+ "Shading will break its strong encapsulation." );
continue;
}
@@ -265,8 +280,8 @@ public class DefaultShader
private void shadeSingleJar( ShadeRequest shadeRequest, Set<String>
resources,
List<ResourceTransformer> transformers,
RelocatorRemapper remapper,
- JarOutputStream jos, Multimap<String, File>
duplicates, File jar, JarFile jarFile,
- JarEntry entry, String name )
+ JarOutputStream jos, MultiValuedMap<String,
File> duplicates, File jar,
+ JarFile jarFile, JarEntry entry, String name )
throws IOException, MojoExecutionException
{
try ( InputStream in = jarFile.getInputStream( entry ) )
@@ -307,7 +322,7 @@ public class DefaultShader
// Avoid duplicates that aren't accounted for by the
resource transformers
if ( resources.contains( mappedName ) )
{
- getLogger().debug( "We have a duplicate " + name + "
in " + jar );
+ logger.debug( "We have a duplicate " + name + " in " +
jar );
return;
}
@@ -315,7 +330,7 @@ public class DefaultShader
}
else
{
- duplicates.remove( name, jar );
+ duplicates.removeMapping( name, jar );
}
}
}
@@ -358,16 +373,16 @@ public class DefaultShader
private void showOverlappingWarning()
{
- getLogger().warn( "maven-shade-plugin has detected that some class
files are" );
- getLogger().warn( "present in two or more JARs. When this happens,
only one" );
- getLogger().warn( "single version of the class is copied to the uber
jar." );
- getLogger().warn( "Usually this is not harmful and you can skip these
warnings," );
- getLogger().warn( "otherwise try to manually exclude artifacts based
on" );
- getLogger().warn( "mvn dependency:tree -Ddetail=true and the above
output." );
- getLogger().warn( "See
http://maven.apache.org/plugins/maven-shade-plugin/" );
+ logger.warn( "maven-shade-plugin has detected that some class files
are" );
+ logger.warn( "present in two or more JARs. When this happens, only
one" );
+ logger.warn( "single version of the class is copied to the uber jar."
);
+ logger.warn( "Usually this is not harmful and you can skip these
warnings," );
+ logger.warn( "otherwise try to manually exclude artifacts based on" );
+ logger.warn( "mvn dependency:tree -Ddetail=true and the above output."
);
+ logger.warn( "See http://maven.apache.org/plugins/maven-shade-plugin/"
);
}
- private void logSummaryOfDuplicates( Multimap<Collection<File>, String>
overlapping )
+ private void logSummaryOfDuplicates( MultiValuedMap<Collection<File>,
String> overlapping )
{
for ( Collection<File> jarz : overlapping.keySet() )
{
@@ -424,7 +439,7 @@ public class DefaultShader
all.addAll( classes );
all.addAll( resources );
- getLogger().warn(
+ logger.warn(
StringUtils.join( jarzS, ", " ) + " define " + all.size()
+ " overlapping " + StringUtils.join( overlaps, " and " ) + ":
" );
//CHECKSTYLE_ON: LineLength
@@ -435,12 +450,12 @@ public class DefaultShader
for ( int i = 0; i < Math.min( max, all.size() ); i++ )
{
- getLogger().warn( " - " + all.get( i ) );
+ logger.warn( " - " + all.get( i ) );
}
if ( all.size() > max )
{
- getLogger().warn( " - " + ( all.size() - max ) + " more..." );
+ logger.warn( " - " + ( all.size() - max ) + " more..." );
}
}
@@ -512,7 +527,7 @@ public class DefaultShader
}
catch ( ZipException e )
{
- getLogger().debug( "We have a duplicate " + name + " in " +
jar );
+ logger.debug( "We have a duplicate " + name + " in " + jar );
}
return;
@@ -572,7 +587,7 @@ public class DefaultShader
}
catch ( ZipException e )
{
- getLogger().debug( "We have a duplicate " + mappedName + " in " +
jar );
+ logger.debug( "We have a duplicate " + mappedName + " in " + jar );
}
}
@@ -599,7 +614,7 @@ public class DefaultShader
{
if ( transformer.canTransformResource( name ) )
{
- getLogger().debug( "Transforming " + name + " using " +
transformer.getClass().getName() );
+ logger.debug( "Transforming " + name + " using " +
transformer.getClass().getName() );
if ( transformer instanceof ReproducibleResourceTransformer )
{
diff --git a/src/main/java/org/apache/maven/plugins/shade/Shader.java
b/src/main/java/org/apache/maven/plugins/shade/Shader.java
index 02e628c..b93a7a5 100644
--- a/src/main/java/org/apache/maven/plugins/shade/Shader.java
+++ b/src/main/java/org/apache/maven/plugins/shade/Shader.java
@@ -28,8 +28,6 @@ import org.apache.maven.plugin.MojoExecutionException;
*/
public interface Shader
{
- String ROLE = Shader.class.getName();
-
/**
* Perform a shading operation.
*
diff --git a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
index 2f8f6c5..25b8330 100644
--- a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
+++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
@@ -55,12 +55,6 @@ import
org.apache.maven.shared.dependency.graph.DependencyNode;
import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
import
org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.WriterFactory;
@@ -81,6 +75,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.inject.Inject;
+
/**
* Mojo that performs shading delegating to the Shader component.
*
@@ -94,7 +90,6 @@ import java.util.Set;
// CHECKSTYLE_ON: LineLength
public class ShadeMojo
extends AbstractMojo
- implements Contextualizable
{
/**
* The current Maven session.
@@ -375,15 +370,10 @@ public class ShadeMojo
private boolean shadeTestJar;
/**
- * @since 1.6
+ * All the present Shaders.
*/
- private PlexusContainer plexusContainer;
-
- public void contextualize( Context context )
- throws ContextException
- {
- plexusContainer = (PlexusContainer) context.get(
PlexusConstants.PLEXUS_KEY );
- }
+ @Inject
+ private Map<String, Shader> shaders;
/**
* @throws MojoExecutionException in case of an error.
@@ -651,14 +641,13 @@ public class ShadeMojo
{
if ( shaderHint != null )
{
- try
- {
- shader = (Shader) plexusContainer.lookup( Shader.ROLE,
shaderHint );
- }
- catch ( ComponentLookupException e )
+ shader = shaders.get( shaderHint );
+
+ if ( shader == null )
{
- throw new MojoExecutionException( "unable to lookup own Shader
implementation with hint:'" + shaderHint
- + "'", e );
+ throw new MojoExecutionException(
+ "unable to lookup own Shader implementation with hint: '"
+ shaderHint + "'"
+ );
}
}
}
diff --git
a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
index 249258f..d48fd43 100644
--- a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
@@ -46,19 +46,26 @@ import
org.apache.maven.plugins.shade.relocation.SimpleRelocator;
import org.apache.maven.plugins.shade.resource.AppendingTransformer;
import
org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer;
import org.apache.maven.plugins.shade.resource.ResourceTransformer;
-import org.codehaus.plexus.logging.AbstractLogger;
-import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.logging.console.ConsoleLogger;
import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.Os;
import org.junit.Assert;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.mockito.ArgumentCaptor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Opcodes;
+import org.slf4j.Logger;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
/**
* @author Jason van Zyl
@@ -71,9 +78,7 @@ public class DefaultShaderTest
@Test
public void testOverlappingResourcesAreLogged() throws IOException,
MojoExecutionException {
- final DefaultShader shader = new DefaultShader();
- final MockLogger logs = new MockLogger();
- shader.enableLogging(logs);
+ final DefaultShader shader = newShader();
// we will shade two jars and expect to see META-INF/MANIFEST.MF
overlaps, this will always be true
// but this can lead to a broken deployment if intended for OSGi or
so, so even this should be logged
@@ -89,67 +94,70 @@ public class DefaultShaderTest
shadeRequest.setUberJar( new File(
"target/foo-custom_testOverlappingResourcesAreLogged.jar" ) );
shader.shade( shadeRequest );
- final String failureWarnMessage = logs.warnMessages.toString();
- assertTrue( failureWarnMessage, logs.warnMessages.contains(
- "plexus-utils-1.4.1.jar, test-project-1.0-SNAPSHOT.jar define
1 overlapping resource:") );
- assertTrue( failureWarnMessage, logs.warnMessages.contains("-
META-INF/MANIFEST.MF") );
-
- final String failureDebugMessage = logs.debugMessages.toString();
- assertTrue( failureDebugMessage, logs.debugMessages.contains(
- "We have a duplicate META-INF/MANIFEST.MF in
src/test/jars/plexus-utils-1.4.1.jar" ) );
+ assertThat(warnMessages.getAllValues(),
+ hasItem(containsString("plexus-utils-1.4.1.jar,
test-project-1.0-SNAPSHOT.jar define 1 overlapping resource:")));
+ assertThat(warnMessages.getAllValues(),
+ hasItem(containsString("- META-INF/MANIFEST.MF")));
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+ assertThat(debugMessages.getAllValues(),
+ hasItem(containsString("We have a duplicate
META-INF/MANIFEST.MF in src\\test\\jars\\plexus-utils-1.4.1.jar")));
+ }
+ else {
+ assertThat(debugMessages.getAllValues(),
+ hasItem(containsString("We have a duplicate
META-INF/MANIFEST.MF in src/test/jars/plexus-utils-1.4.1.jar")));
+ }
}
@Test
public void testOverlappingResourcesAreLoggedExceptATransformerHandlesIt()
throws Exception {
TemporaryFolder temporaryFolder = new TemporaryFolder();
- Set<File> set = new LinkedHashSet<>();
- temporaryFolder.create();
- File j1 = temporaryFolder.newFile("j1.jar");
- try ( JarOutputStream jos = new JarOutputStream(new FileOutputStream(
j1 ) ) )
- {
- jos.putNextEntry(new JarEntry( "foo.txt" ));
- jos.write("c1".getBytes(StandardCharsets.UTF_8));
- jos.closeEntry();
+ try {
+ Set<File> set = new LinkedHashSet<>();
+ temporaryFolder.create();
+ File j1 = temporaryFolder.newFile("j1.jar");
+ try (JarOutputStream jos = new JarOutputStream(new
FileOutputStream(j1))) {
+ jos.putNextEntry(new JarEntry("foo.txt"));
+ jos.write("c1".getBytes(StandardCharsets.UTF_8));
+ jos.closeEntry();
+ }
+ File j2 = temporaryFolder.newFile("j2.jar");
+ try (JarOutputStream jos = new JarOutputStream(new
FileOutputStream(j2))) {
+ jos.putNextEntry(new JarEntry("foo.txt"));
+ jos.write("c2".getBytes(StandardCharsets.UTF_8));
+ jos.closeEntry();
+ }
+ set.add(j1);
+ set.add(j2);
+
+ AppendingTransformer transformer = new AppendingTransformer();
+ Field resource =
AppendingTransformer.class.getDeclaredField("resource");
+ resource.setAccessible(true);
+ resource.set(transformer, "foo.txt");
+
+ ShadeRequest shadeRequest = new ShadeRequest();
+ shadeRequest.setJars(set);
+ shadeRequest.setRelocators(Collections.<Relocator>emptyList());
+
shadeRequest.setResourceTransformers(Collections.<ResourceTransformer>singletonList(transformer));
+ shadeRequest.setFilters(Collections.<Filter>emptyList());
+ shadeRequest.setUberJar(new
File("target/foo-custom_testOverlappingResourcesAreLogged.jar"));
+
+ DefaultShader shaderWithTransformer = newShader();
+ shaderWithTransformer.shade(shadeRequest);
+
+ assertThat(warnMessages.getAllValues().size(), is(0) );
+
+ DefaultShader shaderWithoutTransformer = newShader();
+
shadeRequest.setResourceTransformers(Collections.<ResourceTransformer>emptyList());
+ shaderWithoutTransformer.shade(shadeRequest);
+
+ assertThat(warnMessages.getAllValues(),
+ hasItems(containsString("j1.jar, j2.jar define 1 overlapping
resource:")));
+ assertThat(warnMessages.getAllValues(),
+ hasItems(containsString("- foo.txt")));
}
- File j2 = temporaryFolder.newFile("j2.jar");
- try ( JarOutputStream jos = new JarOutputStream(new FileOutputStream(
j2 ) ) )
- {
- jos.putNextEntry(new JarEntry( "foo.txt" ));
- jos.write("c2".getBytes(StandardCharsets.UTF_8));
- jos.closeEntry();
+ finally {
+ temporaryFolder.delete();
}
- set.add( j1 );
- set.add( j2 );
-
- AppendingTransformer transformer = new AppendingTransformer();
- Field resource = AppendingTransformer.class.getDeclaredField(
"resource" );
- resource.setAccessible( true );
- resource.set( transformer, "foo.txt" );
-
- ShadeRequest shadeRequest = new ShadeRequest();
- shadeRequest.setJars( set );
- shadeRequest.setRelocators( Collections.<Relocator>emptyList() );
- shadeRequest.setResourceTransformers(
Collections.<ResourceTransformer>singletonList( transformer) );
- shadeRequest.setFilters( Collections.<Filter>emptyList() );
- shadeRequest.setUberJar( new File(
"target/foo-custom_testOverlappingResourcesAreLogged.jar" ) );
-
- DefaultShader shaderWithTransformer = new DefaultShader();
- final MockLogger logWithTransformer = new MockLogger();
- shaderWithTransformer.enableLogging( logWithTransformer );
- shaderWithTransformer.shade( shadeRequest );
-
- DefaultShader shaderWithoutTransformer = new DefaultShader();
- MockLogger logWithoutTransformer = new MockLogger();
- shaderWithoutTransformer.enableLogging( logWithoutTransformer );
- shadeRequest.setResourceTransformers(
Collections.<ResourceTransformer>emptyList() );
- shaderWithoutTransformer.shade( shadeRequest );
-
- temporaryFolder.delete();
-
- assertTrue( logWithTransformer.warnMessages.toString(),
logWithTransformer.warnMessages.isEmpty() );
- assertTrue( logWithoutTransformer.warnMessages.toString(),
- logWithoutTransformer.warnMessages.containsAll(
- Arrays.asList( "j1.jar, j2.jar define 1 overlapping
resource:", "- foo.txt" ) ) );
}
@Test
@@ -360,59 +368,24 @@ public class DefaultShaderTest
s.shade( shadeRequest );
}
- private static DefaultShader newShader()
+ private DefaultShader newShader()
{
- DefaultShader s = new DefaultShader();
-
- s.enableLogging( new ConsoleLogger( Logger.LEVEL_INFO, "TEST" ) );
-
- return s;
+ return new DefaultShader(mockLogger());
}
- private static class MockLogger extends AbstractLogger
- {
- private final List<String> debugMessages = new ArrayList<>();
- private final List<String> warnMessages = new ArrayList<>();
-
- private MockLogger()
- {
- super( Logger.LEVEL_INFO, "test" );
- }
-
- @Override
- public void debug( String s, Throwable throwable )
- {
- debugMessages.add( s.replace( '\\', '/' ).trim() );
- }
+ private ArgumentCaptor<String> debugMessages;
- @Override
- public void info( String s, Throwable throwable )
- {
- // no-op
- }
+ private ArgumentCaptor<String> warnMessages;
- @Override
- public void warn( String s, Throwable throwable )
- {
- warnMessages.add( s.replace( '\\', '/' ).trim() );
- }
-
- @Override
- public void error( String s, Throwable throwable )
- {
- // no-op
- }
-
- @Override
- public void fatalError( String s, Throwable throwable )
- {
- // no-op
- }
-
- @Override
- public Logger getChildLogger( String s )
- {
- return this;
- }
+ private Logger mockLogger()
+ {
+ debugMessages = ArgumentCaptor.forClass(String.class);
+ warnMessages = ArgumentCaptor.forClass(String.class);
+ Logger logger = mock(Logger.class);
+ when(logger.isDebugEnabled()).thenReturn(true);
+ when(logger.isWarnEnabled()).thenReturn(true);
+ doNothing().when(logger).debug(debugMessages.capture());
+ doNothing().when(logger).warn(warnMessages.capture());
+ return logger;
}
}
diff --git a/src/test/java/org/apache/maven/plugins/shade/MockShader.java
b/src/test/java/org/apache/maven/plugins/shade/MockShader.java
index a1b65d5..436edc3 100644
--- a/src/test/java/org/apache/maven/plugins/shade/MockShader.java
+++ b/src/test/java/org/apache/maven/plugins/shade/MockShader.java
@@ -19,14 +19,17 @@ package org.apache.maven.plugins.shade;
*/
import org.apache.maven.plugin.MojoExecutionException;
-import org.codehaus.plexus.component.annotations.Component;
import java.io.IOException;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
/**
* @author Olivier Lamy
*/
-@Component( role = Shader.class, hint = "mock" )
+@Singleton
+@Named( "mock" )
public class MockShader
implements Shader
{
diff --git
a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
index 181287c..0799f3c 100644
--- a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
@@ -53,6 +53,8 @@ import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusTestCase;
/**
@@ -62,6 +64,11 @@ import org.codehaus.plexus.PlexusTestCase;
public class ShadeMojoTest
extends PlexusTestCase
{
+ @Override
+ protected void customizeContainerConfiguration(final
ContainerConfiguration configuration) {
+ configuration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
+ }
+
public void testManifestTransformerSelection() throws Exception
{
final ShadeMojo mojo = new ShadeMojo();
@@ -126,7 +133,7 @@ public class ShadeMojoTest
{
File jarFile = new File( getBasedir(), "target/unit/foo-bar.jar" );
- Shader s = (Shader) lookup( Shader.ROLE, "default" );
+ Shader s = lookup( Shader.class );
Set<File> set = new LinkedHashSet<>();
set.add( new File( getBasedir(),
"src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) );
@@ -224,7 +231,7 @@ public class ShadeMojoTest
// create and configure MavenProject
MavenProject project = new MavenProject();
- ArtifactHandler artifactHandler = (ArtifactHandler) lookup(
ArtifactHandler.ROLE );
+ ArtifactHandler artifactHandler = lookup( ArtifactHandler.class );
Artifact artifact = new DefaultArtifact( "org.apache.myfaces.core",
"myfaces-impl",
VersionRange.createFromVersion( "2.0.1-SNAPSHOT" ), "compile", "jar",
null, artifactHandler );
@@ -266,7 +273,7 @@ public class ShadeMojoTest
public void shaderWithPattern( String shadedPattern, File jar )
throws Exception
{
- Shader s = (Shader) lookup( Shader.ROLE );
+ Shader s = lookup( Shader.class );
Set<File> set = new LinkedHashSet<>();