You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/04/26 16:34:57 UTC

[maven-assembly-plugin] 01/01: [MASSEMBLY-927] Support for properties mapping on executions of maven-assembly-plugin

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MASSEMBLY-927
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git

commit 0a1aaada8a71334e1256587f91792b9807ae1b94
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Apr 26 18:34:19 2020 +0200

    [MASSEMBLY-927] Support for properties mapping on executions of maven-assembly-plugin
---
 .../assembly/AssemblerConfigurationSource.java     | 15 ++++++++---
 .../plugins/assembly/format/ReaderFormatter.java   |  8 +++---
 .../assembly/mojos/AbstractAssemblyMojo.java       | 13 ++++++++++
 .../assembly/format/ReaderFormatterTest.java       | 29 ++++++++++++++++++++++
 .../assembly/testutils/PojoConfigSource.java       | 23 ++++++++++++++---
 5 files changed, 77 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java b/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
index da038d6..ace04d2 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
@@ -19,6 +19,12 @@ package org.apache.maven.plugins.assembly;
  * under the License.
  */
 
+import java.io.File;
+import java.util.List;
+import java.util.Properties;
+
+import javax.annotation.Nonnull;
+
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
@@ -26,10 +32,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.filtering.MavenReaderFilter;
 import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
 
-import javax.annotation.Nonnull;
-import java.io.File;
-import java.util.List;
-
 /**
  *
  */
@@ -114,6 +116,11 @@ public interface AssemblerConfigurationSource
      * @return The filters.
      */
     List<String> getFilters();
+    
+    /**
+     * @return the additional properties
+     */
+    Properties getAdditionalProperties();
 
     /**
      * @return include the project build filters or not.
diff --git a/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java b/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
index 4b26f35..f47a6fa 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/format/ReaderFormatter.java
@@ -37,6 +37,7 @@ import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
 
 /**
@@ -45,7 +46,8 @@ import java.util.Set;
 public class ReaderFormatter
 {
     private static Reader createReaderFilter( @Nonnull Reader source, String escapeString, List<String> delimiters,
-                                              AssemblerConfigurationSource configSource, boolean isPropertiesFile )
+                                              AssemblerConfigurationSource configSource, boolean isPropertiesFile,
+                                              Properties additionalProperties )
         throws IOException
     {
         try
@@ -53,7 +55,7 @@ public class ReaderFormatter
 
             MavenReaderFilterRequest filterRequest =
                 new MavenReaderFilterRequest( source, true, configSource.getProject(), configSource.getFilters(),
-                                              isPropertiesFile, configSource.getMavenSession(), null );
+                                              isPropertiesFile, configSource.getMavenSession(), additionalProperties );
             
             filterRequest.setEscapeString( escapeString );
 
@@ -154,7 +156,7 @@ public class ReaderFormatter
                             : new InputStreamReader( inputStream ); // wtf platform encoding ? TODO: Fix this
                         Reader filtered =
                             createReaderFilter( source, configSource.getEscapeString(), configSource.getDelimiters(),
-                                                configSource, isPropertyFile );
+                                                configSource, isPropertyFile, configSource.getAdditionalProperties() );
                         result = encoding != null
                             ? new ReaderInputStream( filtered, encoding )
                             : new ReaderInputStream( filtered );
diff --git a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
index 2766a33..2999c8d 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
@@ -260,6 +260,14 @@ public abstract class AbstractAssemblyMojo extends AbstractMojo implements Assem
      */
     @Parameter
     private List<String> filters;
+    
+    /**
+     * A set of additional properties to use for filtering
+     * 
+     * @since 3.3.0
+     */
+    @Parameter
+    private Properties additionalProperties;
 
     /**
      * If True (default) then the ${project.build.filters} are also used in addition to any further filters defined for
@@ -783,6 +791,11 @@ public abstract class AbstractAssemblyMojo extends AbstractMojo implements Assem
     {
         this.filters = filters;
     }
+    
+    public Properties getAdditionalProperties()
+    {
+        return additionalProperties;
+    }
 
     @Override
     public boolean isIncludeProjectBuildFilters()
diff --git a/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java b/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
index 51d0b93..d0279a7 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/format/ReaderFormatterTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -33,6 +34,7 @@ import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Properties;
 import java.util.Set;
 
 import org.apache.commons.io.IOUtils;
@@ -40,11 +42,14 @@ import org.apache.maven.model.Model;
 import org.apache.maven.plugins.assembly.testutils.PojoConfigSource;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.filtering.DefaultMavenReaderFilter;
+import org.apache.maven.shared.filtering.MavenReaderFilter;
+import org.apache.maven.shared.filtering.MavenReaderFilterRequest;
 import org.codehaus.plexus.archiver.resources.PlexusIoVirtualFileResource;
 import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
 import org.codehaus.plexus.components.io.resources.PlexusIoResource;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 
 
 public class ReaderFormatterTest
@@ -99,6 +104,30 @@ public class ReaderFormatterTest
         assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
     }
 
+    @Test
+    public void additionalProperties() throws Exception
+    {
+        final MavenReaderFilter mavenReaderFilter = mock( MavenReaderFilter.class );
+
+        final PojoConfigSource cfg = getPojoConfigSource();
+        cfg.setMavenReaderFilter( mavenReaderFilter );
+        Properties additionalProperties = new Properties();
+        cfg.setAdditionalProperties( additionalProperties );
+        
+        InputStreamTransformer transformer =  ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "unix" );
+        
+        final InputStream inputStream = new ByteArrayInputStream( new byte[0] );
+        PlexusIoResource resource = mock( PlexusIoResource.class );
+        when( resource.getName() ).thenReturn( "file.txt" );
+
+        transformer.transform( resource, inputStream );
+
+        ArgumentCaptor<MavenReaderFilterRequest> filteringRequest = 
+                        ArgumentCaptor.forClass(MavenReaderFilterRequest.class);
+        verify( mavenReaderFilter ).filter( filteringRequest.capture() );
+        assertThat( filteringRequest.getValue().getAdditionalProperties(), sameInstance( additionalProperties ) );
+    }
+
     private MavenProject createBasicMavenProject()
     {
         final Model model = new Model();
diff --git a/src/test/java/org/apache/maven/plugins/assembly/testutils/PojoConfigSource.java b/src/test/java/org/apache/maven/plugins/assembly/testutils/PojoConfigSource.java
index 75f501f..9325955 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/testutils/PojoConfigSource.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/testutils/PojoConfigSource.java
@@ -18,6 +18,12 @@
  */
 package org.apache.maven.plugins.assembly.testutils;
 
+import java.io.File;
+import java.util.List;
+import java.util.Properties;
+
+import javax.annotation.Nonnull;
+
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
@@ -26,10 +32,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.filtering.MavenReaderFilter;
 import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
 
-import javax.annotation.Nonnull;
-import java.io.File;
-import java.util.List;
-
 public class PojoConfigSource
     implements AssemblerConfigurationSource
 {
@@ -88,6 +90,8 @@ public class PojoConfigSource
     private File archiveBaseDirectory;
 
     private List<String> filters;
+    
+    private Properties additionalProperties;
 
     private boolean isIncludeProjectBuildFilter;
 
@@ -291,6 +295,17 @@ public class PojoConfigSource
         this.filters = filters;
     }
 
+    @Override
+    public Properties getAdditionalProperties()
+    {
+        return additionalProperties;
+    }
+
+    public void setAdditionalProperties( Properties additionalProperties )
+    {
+        this.additionalProperties = additionalProperties;
+    }
+
     public boolean isIncludeProjectBuildFilters()
     {
         return isIncludeProjectBuildFilter;