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 <ta...@cservenak.net>
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<>();
 

Reply via email to