[MASSEMBLY-988] Use newer plexus-archiver methods, code cleanup
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java b/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
index efadb58..e90b2c7 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
@@ -19,7 +19,7 @@
package org.apache.maven.plugins.assembly.archive;
import java.io.File;
-import java.util.Date;
+import java.nio.file.attribute.FileTime;
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
import org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
@@ -65,6 +65,6 @@
AssemblerConfigurationSource configSource,
boolean recompressZippedFiles,
String mergeManifestMode,
- Date sourceDateEpoch)
+ FileTime sourceDateEpoch)
throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException;
}
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 a112870..9e54cdd 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
@@ -26,9 +26,9 @@
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.nio.file.attribute.FileTime;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -128,7 +128,7 @@
final AssemblerConfigurationSource configSource,
boolean recompressZippedFiles,
String mergeManifestMode,
- Date outputTimestamp)
+ FileTime outputTimestamp)
throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException {
validate(assembly);
@@ -271,21 +271,25 @@
final List<ContainerDescriptorHandler> containerHandlers,
boolean recompressZippedFiles,
String mergeManifestMode,
- Date outputTimestamp)
+ FileTime outputTimestamp)
throws NoSuchArchiverException {
Archiver archiver;
- if ("txz".equals(format)
- || "tgz".equals(format)
- || "tbz2".equals(format)
- || "tzst".equals(format)
- || format.startsWith("tar")) {
- archiver = createTarArchiver(format, TarLongFileMode.valueOf(configSource.getTarLongFileMode()));
- } else if ("war".equals(format)) {
- archiver = createWarArchiver();
+
+ // one missing alias in plexus-archiver
+ if ("tzst".equals(format)) {
+ archiver = createTarZstArchiver();
} else {
archiver = archiverManager.getArchiver(format);
}
+ if (archiver instanceof TarArchiver) {
+ ((TarArchiver) archiver).setLongfile(TarLongFileMode.valueOf(configSource.getTarLongFileMode()));
+ }
+
+ if (archiver instanceof WarArchiver) {
+ ((WarArchiver) archiver).setExpectWebXml(false);
+ }
+
if (archiver instanceof AbstractZipArchiver) {
((AbstractZipArchiver) archiver).setRecompressAddedZips(recompressZippedFiles);
}
@@ -323,13 +327,12 @@
archiver = new DryRunArchiver(archiver, LOGGER);
}
- archiver.setUseJvmChmod(configSource.isUpdateOnly());
archiver.setIgnorePermissions(configSource.isIgnorePermissions());
archiver.setForced(!configSource.isUpdateOnly());
// configure for Reproducible Builds based on outputTimestamp value
if (outputTimestamp != null) {
- archiver.configureReproducible(outputTimestamp);
+ archiver.configureReproducibleBuild(outputTimestamp);
}
if (configSource.getOverrideUid() != null) {
@@ -460,49 +463,9 @@
}
}
- protected Archiver createWarArchiver() throws NoSuchArchiverException {
- final WarArchiver warArchiver = (WarArchiver) archiverManager.getArchiver("war");
- warArchiver.setIgnoreWebxml(false); // See MNG-1274
-
- return warArchiver;
- }
-
- protected Archiver createTarArchiver(final String format, final TarLongFileMode tarLongFileMode)
- throws NoSuchArchiverException {
+ protected Archiver createTarZstArchiver() throws NoSuchArchiverException {
final TarArchiver tarArchiver = (TarArchiver) archiverManager.getArchiver("tar");
- final int index = format.indexOf('.');
- if (index >= 0) {
- TarArchiver.TarCompressionMethod tarCompressionMethod;
- // TODO: this should accept gz and bz2 as well so we can skip
- // TODO: over the switch
- final String compression = format.substring(index + 1);
- if ("gz".equals(compression)) {
- tarCompressionMethod = TarArchiver.TarCompressionMethod.gzip;
- } else if ("bz2".equals(compression)) {
- tarCompressionMethod = TarArchiver.TarCompressionMethod.bzip2;
- } else if ("xz".equals(compression)) {
- tarCompressionMethod = TarArchiver.TarCompressionMethod.xz;
- } else if ("snappy".equals(compression)) {
- tarCompressionMethod = TarArchiver.TarCompressionMethod.snappy;
- } else if ("zst".equals(compression)) {
- tarCompressionMethod = TarArchiver.TarCompressionMethod.zstd;
- } else {
- // TODO: better handling
- throw new IllegalArgumentException("Unknown compression format: " + compression);
- }
- tarArchiver.setCompression(tarCompressionMethod);
- } else if ("tgz".equals(format)) {
- tarArchiver.setCompression(TarArchiver.TarCompressionMethod.gzip);
- } else if ("tbz2".equals(format)) {
- tarArchiver.setCompression(TarArchiver.TarCompressionMethod.bzip2);
- } else if ("txz".equals(format)) {
- tarArchiver.setCompression(TarArchiver.TarCompressionMethod.xz);
- } else if ("tzst".equals(format)) {
- tarArchiver.setCompression(TarArchiver.TarCompressionMethod.zstd);
- }
-
- tarArchiver.setLongfile(tarLongFileMode);
-
+ tarArchiver.setCompression(TarArchiver.TarCompressionMethod.zstd);
return tarArchiver;
}
}
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 466234d..d5eeea7 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
@@ -19,8 +19,8 @@
package org.apache.maven.plugins.assembly.mojos;
import java.io.File;
+import java.nio.file.attribute.FileTime;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
import java.util.Properties;
@@ -475,8 +475,9 @@
// TODO: include dependencies marked for distribution under certain formats
// TODO: how, might we plug this into an installer, such as NSIS?
- MavenArchiver mavenArchiver = new MavenArchiver();
- Date outputDate = mavenArchiver.parseOutputTimestamp(outputTimestamp);
+ FileTime outputDate = MavenArchiver.parseBuildOutputTimestamp(outputTimestamp)
+ .map(FileTime::from)
+ .orElse(null);
boolean warnedAboutMainProjectArtifact = false;
for (final Assembly assembly : assemblies) {
@@ -484,10 +485,10 @@
final String fullName = AssemblyFormatUtils.getDistributionName(assembly, this);
List<String> effectiveFormats = formats;
- if (effectiveFormats == null || effectiveFormats.size() == 0) {
+ if (effectiveFormats == null || effectiveFormats.isEmpty()) {
effectiveFormats = assembly.getFormats();
}
- if (effectiveFormats == null || effectiveFormats.size() == 0) {
+ if (effectiveFormats == null || effectiveFormats.isEmpty()) {
throw new MojoFailureException(
"No formats specified in the execution parameters or the assembly descriptor.");
}
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 83267c5..4c52231 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
@@ -31,6 +31,7 @@
import org.apache.maven.plugins.assembly.filter.ContainerDescriptorHandler;
import org.apache.maven.plugins.assembly.model.Assembly;
import org.apache.maven.plugins.assembly.mojos.AbstractAssemblyMojo;
+import org.apache.maven.plugins.assembly.testutils.PojoConfigSource;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
@@ -39,6 +40,7 @@
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.diags.NoOpArchiver;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
import org.codehaus.plexus.archiver.tar.TarArchiver;
import org.codehaus.plexus.archiver.tar.TarLongFileMode;
import org.codehaus.plexus.archiver.war.WarArchiver;
@@ -53,6 +55,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
@@ -137,7 +140,7 @@
verify(configSource).isDryRun();
verify(configSource).isIgnoreDirFormatExtensions();
verify(configSource).isIgnorePermissions();
- verify(configSource, times(2)).isUpdateOnly();
+ verify(configSource).isUpdateOnly();
verify(phase).execute(eq(assembly), any(Archiver.class), eq(configSource));
@@ -179,7 +182,7 @@
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 +207,7 @@
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);
@@ -221,13 +224,13 @@
verify(configSource).getWorkingDirectory();
verify(configSource).isDryRun();
verify(configSource).isIgnorePermissions();
- verify(configSource, times(2)).isUpdateOnly();
+ verify(configSource).isUpdateOnly();
verify(archiverManager).getArchiver("tar");
}
@Test
- public void testCreateArchiver_ShouldCreateWarArchiverWithIgnoreWebxmlSetToFalse() throws Exception {
+ public void testCreateArchiver_ShouldCreateWarArchiverWitEexpectWebXmlSetToFalse() throws Exception {
final TestWarArchiver twArchiver = new TestWarArchiver();
when(archiverManager.getArchiver("war")).thenReturn(twArchiver);
@@ -241,11 +244,12 @@
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("war", false, null, configSource, null, false, null, null);
- assertFalse(twArchiver.ignoreWebxml);
+ assertNotNull(twArchiver.expectWebXml);
+ assertFalse(twArchiver.expectWebXml);
// result of easymock migration, should be assert of expected result instead of verifying methodcalls
verify(configSource).getArchiverConfig();
@@ -259,7 +263,7 @@
verify(configSource).getWorkingDirectory();
verify(configSource).isDryRun();
verify(configSource).isIgnorePermissions();
- verify(configSource, times(2)).isUpdateOnly();
+ verify(configSource).isUpdateOnly();
verify(archiverManager).getArchiver("war");
}
@@ -278,7 +282,7 @@
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);
@@ -291,36 +295,24 @@
verify(configSource).getWorkingDirectory();
verify(configSource).isDryRun();
verify(configSource).isIgnorePermissions();
- verify(configSource, times(2)).isUpdateOnly();
+ verify(configSource).isUpdateOnly();
verify(archiverManager).getArchiver("zip");
}
@Test
- public void testCreateWarArchiver_ShouldDisableIgnoreWebxmlOption() throws Exception {
- final TestWarArchiver twArchiver = new TestWarArchiver();
-
- when(archiverManager.getArchiver("war")).thenReturn(twArchiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createWarArchiver();
-
- assertFalse(twArchiver.ignoreWebxml);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("war");
- }
-
- @Test
public void testCreateTarArchiver_ShouldNotInitializeCompression() throws Exception {
final TestTarArchiver archiver = new TestTarArchiver();
when(archiverManager.getArchiver("tar")).thenReturn(archiver);
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
+ final DefaultAssemblyArchiver subject = createSubject(new ArrayList<>());
- subject.createTarArchiver("tar", TarLongFileMode.fail);
+ PojoConfigSource configSource = new PojoConfigSource();
+ configSource.setTarLongFileMode(TarLongFileMode.fail.name());
+ configSource.setWorkingDirectory(new File(""));
+
+ subject.createArchiver("tar", true, "", configSource, null, false, null, null);
assertNull(new TestTarArchiver().compressionMethod);
assertEquals(TarLongFileMode.fail, archiver.longFileMode);
@@ -330,133 +322,18 @@
}
@Test
- public void testCreateTarArchiver_TarGzFormat_ShouldInitializeGZipCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tar.gz", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.gzip, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_TgzFormat_ShouldInitializeGZipCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tgz", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.gzip, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_TarBz2Format_ShouldInitializeBZipCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tar.bz2", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.bzip2, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_Tbz2Format_ShouldInitializeBZipCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tbz2", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.bzip2, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_TarXzFormat_ShouldInitializeXzCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tar.xz", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.xz, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_TXzFormat_ShouldInitializeXzCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("txz", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.xz, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
- public void testCreateTarArchiver_TarZstFormat_ShouldInitializeZstCompression() throws Exception {
- final TestTarArchiver archiver = new TestTarArchiver();
-
- when(archiverManager.getArchiver("tar")).thenReturn(archiver);
-
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
-
- subject.createTarArchiver("tar.zst", TarLongFileMode.fail);
-
- assertEquals(TarArchiver.TarCompressionMethod.zstd, archiver.compressionMethod);
- assertEquals(TarLongFileMode.fail, archiver.longFileMode);
-
- // result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
- }
-
- @Test
public void testCreateTarArchiver_TZstFormat_ShouldInitializeZstCompression() throws Exception {
final TestTarArchiver archiver = new TestTarArchiver();
when(archiverManager.getArchiver("tar")).thenReturn(archiver);
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
+ final DefaultAssemblyArchiver subject = createSubject(new ArrayList<>());
- subject.createTarArchiver("tzst", TarLongFileMode.fail);
+ PojoConfigSource configSource = new PojoConfigSource();
+ configSource.setTarLongFileMode(TarLongFileMode.fail.name());
+ configSource.setWorkingDirectory(new File(""));
+
+ subject.createArchiver("tzst", true, "", configSource, null, false, null, null);
assertEquals(TarArchiver.TarCompressionMethod.zstd, archiver.compressionMethod);
assertEquals(TarLongFileMode.fail, archiver.longFileMode);
@@ -469,20 +346,20 @@
public void testCreateTarArchiver_InvalidFormat_ShouldFailWithInvalidCompression() throws Exception {
final TestTarArchiver ttArchiver = new TestTarArchiver();
- when(archiverManager.getArchiver("tar")).thenReturn(ttArchiver);
+ when(archiverManager.getArchiver("tar.ZZZ")).thenThrow(new NoSuchArchiverException("no archiver"));
- final DefaultAssemblyArchiver subject = createSubject(new ArrayList<AssemblyArchiverPhase>());
+ final DefaultAssemblyArchiver subject = createSubject(new ArrayList<>());
try {
- subject.createTarArchiver("tar.Z", null);
+ subject.createArchiver("tar.ZZZ", true, "", null, null, false, null, null);
fail("Invalid compression formats should throw an error.");
- } catch (final IllegalArgumentException e) {
+ } catch (final NoSuchArchiverException e) {
// expected.
}
// result of easymock migration, should be assert of expected result instead of verifying methodcalls
- verify(archiverManager).getArchiver("tar");
+ verify(archiverManager).getArchiver("tar.ZZZ");
}
private DefaultAssemblyArchiver createSubject(final List<AssemblyArchiverPhase> phases) {
@@ -516,12 +393,12 @@
private static final class TestWarArchiver extends WarArchiver {
- boolean ignoreWebxml;
+ Boolean expectWebXml;
@Override
- public void setIgnoreWebxml(final boolean ignore) {
- ignoreWebxml = ignore;
- super.setIgnoreWebxml(ignore);
+ public void setExpectWebXml(boolean expectWebXml) {
+ this.expectWebXml = expectWebXml;
+ super.setExpectWebXml(expectWebXml);
}
}