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 12:33:59 UTC
[maven-assembly-plugin] 01/01: [MASSEMBLYE-849] Add
nonFilteredFileExtensions to avoid filtering of binary files
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MASSEMBLY-849
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git
commit 52a84fed26858323f61ed41bd71e3befd7910ad3
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Apr 26 14:33:42 2020 +0200
[MASSEMBLYE-849] Add nonFilteredFileExtensions to avoid filtering of binary files
---
.../archive/phase/FileItemAssemblyPhase.java | 1 +
.../archive/task/AddDependencySetsTask.java | 13 +++--
.../assembly/archive/task/AddFileSetsTask.java | 16 ++++---
.../plugins/assembly/format/ReaderFormatter.java | 14 +++++-
src/main/mdo/assembly-component.mdo | 22 +++++++++
src/main/mdo/assembly.mdo | 22 +++++++++
.../assembly/format/ReaderFormatterTest.java | 55 +++++++++++++++-------
7 files changed, 114 insertions(+), 29 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
index f866ffb..68d23aa 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
@@ -142,6 +142,7 @@ public class FileItemAssemblyPhase
{
final InputStreamTransformer fileSetTransformers =
ReaderFormatter.getFileSetTransformers( configSource, fileItem.isFiltered(),
+ Collections.<String>emptySet(),
fileItem.getLineEnding() );
final PlexusIoResource restoUse;
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
index 7346e90..ba11f00 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
@@ -23,6 +23,7 @@ import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -142,11 +143,13 @@ public class AddDependencySetsTask
logger.debug( "Adding " + dependencyArtifacts.size() + " dependency artifacts." );
- InputStreamTransformer fileSetTransformers =
- isUnpackWithOptions( dependencySet )
- ? ReaderFormatter.getFileSetTransformers( configSource, dependencySet.getUnpackOptions().isFiltered(),
- dependencySet.getUnpackOptions().getLineEnding() )
- : null;
+ UnpackOptions unpackOptions = dependencySet.getUnpackOptions();
+ InputStreamTransformer fileSetTransformers = isUnpackWithOptions( dependencySet )
+ ? ReaderFormatter.getFileSetTransformers( configSource,
+ unpackOptions.isFiltered(),
+ new HashSet<>( unpackOptions.getNonFilteredFileExtensions() ),
+ unpackOptions.getLineEnding() )
+ : null;
for ( final Artifact depArtifact : dependencyArtifacts )
{
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
index 5e44521..1f6a1d2 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddFileSetsTask.java
@@ -19,6 +19,12 @@ package org.apache.maven.plugins.assembly.archive.task;
* under the License.
*/
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
@@ -33,11 +39,6 @@ import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
/**
*
*/
@@ -137,7 +138,10 @@ public class AddFileSetsTask
if ( fileSetDir.exists() )
{
InputStreamTransformer fileSetTransformers =
- ReaderFormatter.getFileSetTransformers( configSource, fileSet.isFiltered(), fileSet.getLineEnding() );
+ ReaderFormatter.getFileSetTransformers( configSource,
+ fileSet.isFiltered(),
+ new HashSet<>( fileSet.getNonFilteredFileExtensions() ),
+ fileSet.getLineEnding() );
if ( fileSetTransformers == null )
{
logger.debug( "NOT reformatting any files in " + fileSetDir );
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 6b50534..4b26f35 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.Set;
/**
*
@@ -114,7 +115,9 @@ public class ReaderFormatter
@Nullable
public static InputStreamTransformer getFileSetTransformers( final AssemblerConfigurationSource configSource,
- final boolean isFiltered, String fileSetLineEnding )
+ final boolean isFiltered,
+ final Set<String> nonFilteredFileExtensions,
+ String fileSetLineEnding )
throws AssemblyFormattingException
{
final LineEndings lineEndingToUse = LineEndingsUtils.getLineEnding( fileSetLineEnding );
@@ -131,6 +134,15 @@ public class ReaderFormatter
@Nonnull InputStream inputStream )
throws IOException
{
+ final String fileName = plexusIoResource.getName();
+ for ( String extension : nonFilteredFileExtensions )
+ {
+ if ( fileName.endsWith( '.' + extension ) )
+ {
+ return inputStream;
+ }
+ }
+
InputStream result = inputStream;
if ( isFiltered )
{
diff --git a/src/main/mdo/assembly-component.mdo b/src/main/mdo/assembly-component.mdo
index 32b5f97..792bcc9 100644
--- a/src/main/mdo/assembly-component.mdo
+++ b/src/main/mdo/assembly-component.mdo
@@ -283,6 +283,17 @@
<defaultValue>false</defaultValue>
<type>boolean</type>
</field>
+ <field>
+ <name>nonFilteredFileExtensions</name>
+ <version>2.1.0+</version>
+ <description>
+ Additional file extensions to not apply filtering (Since 3.2.0)
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
</class>
<class>
@@ -1240,6 +1251,17 @@
<type>boolean</type>
</field>
<field>
+ <name>nonFilteredFileExtensions</name>
+ <version>2.1.0+</version>
+ <description>
+ Additional file extensions to not apply filtering (Since 3.2.0)
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
<name>lineEnding</name>
<version>1.1.2+</version>
<type>String</type>
diff --git a/src/main/mdo/assembly.mdo b/src/main/mdo/assembly.mdo
index 2b6517f..84d39aa 100644
--- a/src/main/mdo/assembly.mdo
+++ b/src/main/mdo/assembly.mdo
@@ -403,6 +403,17 @@
<defaultValue>false</defaultValue>
<type>boolean</type>
</field>
+ <field>
+ <name>nonFilteredFileExtensions</name>
+ <version>2.1.0+</version>
+ <description>
+ Additional file extensions to not apply filtering (Since 3.2.0)
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
</class>
<class>
@@ -1352,6 +1363,17 @@
<type>boolean</type>
</field>
<field>
+ <name>nonFilteredFileExtensions</name>
+ <version>2.1.0+</version>
+ <description>
+ Additional file extensions to not apply filtering (Since 3.2.0)
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
<name>lineEnding</name>
<version>1.1.2+</version>
<type>String</type>
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 762f65e..51d0b93 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
@@ -19,6 +19,22 @@ package org.apache.maven.plugins.assembly.format;
* under the License.
*/
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.sameInstance;
+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 java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.commons.io.IOUtils;
import org.apache.maven.model.Model;
import org.apache.maven.plugins.assembly.testutils.PojoConfigSource;
@@ -26,16 +42,10 @@ import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.filtering.DefaultMavenReaderFilter;
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 java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-import static org.junit.Assert.assertEquals;
-
public class ReaderFormatterTest
{
@@ -44,7 +54,7 @@ public class ReaderFormatterTest
throws IOException, AssemblyFormattingException
{
final PojoConfigSource cfg = getPojoConfigSource();
- InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "dos" );
+ InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "dos" );
InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
}
@@ -54,7 +64,7 @@ public class ReaderFormatterTest
throws IOException, AssemblyFormattingException
{
final PojoConfigSource cfg = getPojoConfigSource();
- InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, "dos" );
+ InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, false, Collections.<String>emptySet(), "dos" );
InputStream fud = fileSetTransformers.transform( dummyResource(), payload( "This is a\ntest." ) );
assertEquals( "This is a\r\ntest.", readResultStream( fud ) );
}
@@ -64,12 +74,30 @@ public class ReaderFormatterTest
throws IOException, AssemblyFormattingException
{
final PojoConfigSource cfg = getPojoConfigSource();
- InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, "unix" );
+ InputStreamTransformer fileSetTransformers = ReaderFormatter.getFileSetTransformers( cfg, true, Collections.<String>emptySet(), "unix" );
InputStream fud = fileSetTransformers.transform( dummyResource(), payload(
"This is a test for project: ${artifactId} @artifactId@." ) );
assertEquals( "This is a test for project: anArtifact anArtifact.", readResultStream( fud ) );
}
+ @Test
+ public void nonFilteredFileExtensions() throws Exception
+ {
+ final PojoConfigSource cfg = getPojoConfigSource();
+ Set<String> nonFilteredFileExtensions = new HashSet<>( Arrays.asList( "jpg", "tar.gz" ) );
+ InputStreamTransformer transformer = ReaderFormatter.getFileSetTransformers( cfg, true, nonFilteredFileExtensions, "unix" );
+
+ final InputStream is = new ByteArrayInputStream( new byte[0] );
+ PlexusIoResource resource = mock( PlexusIoResource.class );
+
+ when( resource.getName() ).thenReturn( "file.jpg", "file.tar.gz", "file.txt", "file.nojpg", "file.gz", "file" );
+ assertThat( transformer.transform( resource, is ), sameInstance( is ) );
+ assertThat( transformer.transform( resource, is ), sameInstance( is ) );
+ assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+ assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+ assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+ assertThat( transformer.transform( resource, is ), not( sameInstance( is ) ) );
+ }
private MavenProject createBasicMavenProject()
{
@@ -104,13 +132,6 @@ public class ReaderFormatterTest
cfg.setMavenReaderFilter( mavenReaderFilter );
cfg.setEscapeString( null );
cfg.setMavenProject( createBasicMavenProject() );
-
-/* expect( configSource.getFilters()).andReturn( filters );
-
- expect( configSource.isIncludeProjectBuildFilters()).andReturn( includeProjectBuildFilters );
-
- expect( configSource.getDelimiters()).andReturn( delimiters );
-*/
return cfg;
}