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

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

commit 62a6ff6e245c2190e1b90151de80073ca2842a01
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Sun Apr 23 10:01:21 2023 +0200

    [MASSEMBLY-986] Minimal default Manifest should be used by jar archiver
---
 src/it/projects/reproducible/verify.groovy         |  9 +++++-
 src/it/projects/reproducible/zip-content-755.txt   |  2 +-
 src/it/projects/reproducible/zip-content-775.txt   |  2 +-
 .../assembly/archive/DefaultAssemblyArchiver.java  | 18 +++++++++---
 .../archive/DefaultAssemblyArchiverTest.java       | 34 ++++++++++++----------
 5 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/src/it/projects/reproducible/verify.groovy 
b/src/it/projects/reproducible/verify.groovy
index d96b38ae..9426500b 100644
--- a/src/it/projects/reproducible/verify.groovy
+++ b/src/it/projects/reproducible/verify.groovy
@@ -18,13 +18,20 @@
  * under the License.
  */
 
-//import java.util.zip.*
+import java.util.jar.*;
 import org.apache.commons.compress.archivers.zip.*
 
 File deployDir = new File( basedir, 
'target/repo/org/apache/maven/its/reproducible/1.0' )
 
 assert deployDir.exists()
 
+// Minimal Manifest was created
+JarFile jarFile = new JarFile( new File( deployDir, "reproducible-1.0-src.jar" 
) )
+Manifest mf = jarFile.getManifest()
+Attributes attrs = mf.getMainAttributes()
+assert attrs.size() == 1
+assert attrs.containsKey(Attributes.Name.MANIFEST_VERSION)
+
 ZipFile zip = new ZipFile( new File( deployDir, "reproducible-1.0-src.zip" ) )
 StringBuilder sb = new StringBuilder()
 StringBuilder sb2 = new StringBuilder()
diff --git a/src/it/projects/reproducible/zip-content-755.txt 
b/src/it/projects/reproducible/zip-content-755.txt
index 4a978b77..8775435c 100644
--- a/src/it/projects/reproducible/zip-content-755.txt
+++ b/src/it/projects/reproducible/zip-content-755.txt
@@ -28,5 +28,5 @@ executable: 100755
 
 resulting sha1:
 97d0ea3b4a87cd3ea78edd1c3c25914d69ea97f3 reproducible-1.0-src.zip.sha1
-a0c4cf1ed244e60221e12367f50ff676066b8e65 reproducible-1.0-src.jar.sha1
+d3aec46dedbfc5dcb31f7055f130860aeb8fcf66 reproducible-1.0-src.jar.sha1
 bf93dd529253157352b87097d9d23eba8c9ca61a reproducible-1.0-src.tar.sha1
diff --git a/src/it/projects/reproducible/zip-content-775.txt 
b/src/it/projects/reproducible/zip-content-775.txt
index 0fdde3a3..64a9e72d 100644
--- a/src/it/projects/reproducible/zip-content-775.txt
+++ b/src/it/projects/reproducible/zip-content-775.txt
@@ -28,5 +28,5 @@ executable: 100775
 
 resulting sha1:
 50116502c6107740c2a35ef296b5abda08c5dec7 reproducible-1.0-src.zip.sha1
-cc7e3a984179f63d6b37bc86c61e9cc461c62288 reproducible-1.0-src.jar.sha1
+3bb81a423ca18a01dd76e0f872c66a1a7528f064 reproducible-1.0-src.jar.sha1
 3efc10ec9c3099ba061e58d5b2a935ba643da237 reproducible-1.0-src.tar.sha1
diff --git 
a/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
 
b/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
index 6ec010c8..394be14c 100644
--- 
a/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
+++ 
b/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
@@ -32,6 +32,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
 import 
org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
 import 
org.apache.maven.plugins.assembly.archive.archiver.AssemblyProxyArchiver;
@@ -293,10 +294,7 @@ public class DefaultAssemblyArchiver implements 
AssemblyArchiver {
         final List<FileSelector> extraSelectors = new ArrayList<>();
         final List<ArchiveFinalizer> extraFinalizers = new ArrayList<>();
         if (archiver instanceof JarArchiver) {
-            if (mergeManifestMode != null) {
-                ((JarArchiver) archiver)
-                        
.setFilesetmanifest(JarArchiver.FilesetManifestConfig.valueOf(mergeManifestMode));
-            }
+            configureJarArchiver((JarArchiver) archiver, mergeManifestMode, 
configSource.getJarArchiveConfiguration());
 
             extraSelectors.add(new JarSecurityFileSelector());
 
@@ -351,6 +349,18 @@ public class DefaultAssemblyArchiver implements 
AssemblyArchiver {
         return archiver;
     }
 
+    private void configureJarArchiver(
+            JarArchiver archiver, String mergeManifestMode, 
MavenArchiveConfiguration configuration) {
+        if (mergeManifestMode != null) {
+            
archiver.setFilesetmanifest(JarArchiver.FilesetManifestConfig.valueOf(mergeManifestMode));
+        }
+        archiver.setMinimalDefaultManifest(true);
+        archiver.setCompress(configuration.isCompress());
+        archiver.setForced(configuration.isForced());
+        archiver.setIndex(configuration.isIndex());
+        archiver.setRecompressAddedZips(configuration.isRecompressAddedZips());
+    }
+
     private void configureContainerDescriptorHandler(
             final ContainerDescriptorHandler handler,
             final Xpp3Dom config,
diff --git 
a/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
 
b/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
index 83267c51..3d893f23 100644
--- 
a/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
+++ 
b/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
 import 
org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
@@ -179,7 +180,7 @@ public class DefaultAssemblyArchiverTest {
         when(configSource.getOverrideGid()).thenReturn(0);
         when(configSource.getOverrideGroupName()).thenReturn("root");
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createArchiver("dummy", false, "finalName", configSource, 
null, false, null, null);
 
@@ -204,7 +205,7 @@ public class DefaultAssemblyArchiverTest {
         when(configSource.getOverrideGid()).thenReturn(0);
         when(configSource.getOverrideGroupName()).thenReturn("root");
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createArchiver("tar", false, "finalName", configSource, null, 
false, null, null);
 
@@ -240,8 +241,9 @@ public class DefaultAssemblyArchiverTest {
         when(configSource.getProject()).thenReturn(new MavenProject(new 
Model()));
         when(configSource.getWorkingDirectory()).thenReturn(new File("."));
         when(configSource.isIgnorePermissions()).thenReturn(true);
+        when(configSource.getJarArchiveConfiguration()).thenReturn(new 
MavenArchiveConfiguration());
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createArchiver("war", false, null, configSource, null, false, 
null, null);
 
@@ -249,7 +251,7 @@ public class DefaultAssemblyArchiverTest {
 
         // result of easymock migration, should be assert of expected result 
instead of verifying methodcalls
         verify(configSource).getArchiverConfig();
-        verify(configSource).getJarArchiveConfiguration();
+        verify(configSource, times(2)).getJarArchiveConfiguration();
         verify(configSource).getMavenSession();
         verify(configSource, times(2)).getOverrideGid();
         verify(configSource, times(2)).getOverrideGroupName();
@@ -278,7 +280,7 @@ public class DefaultAssemblyArchiverTest {
         when(configSource.getWorkingDirectory()).thenReturn(new File("."));
         when(configSource.isIgnorePermissions()).thenReturn(true);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createArchiver("zip", false, null, configSource, null, false, 
null, null);
 
@@ -302,7 +304,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("war")).thenReturn(twArchiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createWarArchiver();
 
@@ -318,7 +320,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tar", TarLongFileMode.fail);
 
@@ -335,7 +337,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tar.gz", TarLongFileMode.fail);
 
@@ -352,7 +354,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tgz", TarLongFileMode.fail);
 
@@ -369,7 +371,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tar.bz2", TarLongFileMode.fail);
 
@@ -386,7 +388,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tbz2", TarLongFileMode.fail);
 
@@ -403,7 +405,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tar.xz", TarLongFileMode.fail);
 
@@ -420,7 +422,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("txz", TarLongFileMode.fail);
 
@@ -437,7 +439,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tar.zst", TarLongFileMode.fail);
 
@@ -454,7 +456,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(archiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         subject.createTarArchiver("tzst", TarLongFileMode.fail);
 
@@ -471,7 +473,7 @@ public class DefaultAssemblyArchiverTest {
 
         when(archiverManager.getArchiver("tar")).thenReturn(ttArchiver);
 
-        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<AssemblyArchiverPhase>());
+        final DefaultAssemblyArchiver subject = createSubject(new 
ArrayList<>());
 
         try {
             subject.createTarArchiver("tar.Z", null);

Reply via email to