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);
