avoid negative entry time: upgrade plexus-archiver (#323)
cherry-picked #320
benefit from https://github.com/codehaus-plexus/plexus-archiver/pull/388
diff --git a/pom.xml b/pom.xml
index 985ed10..fd70c8c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,7 @@
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-archiver</artifactId>
- <version>4.10.1</version>
+ <version>4.10.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
diff --git a/src/test/java/org/apache/maven/shared/archiver/MavenArchiverTest.java b/src/test/java/org/apache/maven/shared/archiver/MavenArchiverTest.java
index 5186f9d..5aba31d 100644
--- a/src/test/java/org/apache/maven/shared/archiver/MavenArchiverTest.java
+++ b/src/test/java/org/apache/maven/shared/archiver/MavenArchiverTest.java
@@ -41,6 +41,7 @@
import java.util.jar.Manifest;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
import org.apache.maven.api.Dependency;
import org.apache.maven.api.DependencyCoordinates;
@@ -1385,4 +1386,33 @@
this.path = path;
}
}
+
+ private long testReproducibleJarEntryTime(String name, String timestamp) throws Exception {
+ File jarFile = new File("target/test/dummy-" + name + ".jar");
+
+ MavenArchiver archiver = getMavenArchiver(getCleanJarArchiver(jarFile));
+ archiver.configureReproducibleBuild(timestamp);
+ archiver.createArchive(getDummySession(), getDummyProject(), new MavenArchiveConfiguration());
+
+ assertThat(jarFile).exists();
+ ZipFile zf = new ZipFile(jarFile);
+ ZipEntry ze = zf.getEntry("META-INF/MANIFEST.MF");
+ return ze.getTime();
+ }
+
+ /**
+ * before upgrading plexus archiver to 4.10.2 to benefit from https://github.com/codehaus-plexus/plexus-archiver/pull/388
+ * $ zipdetails target/test/dummy-1970.jar
+ * gives negative Extended Timestamp in Java, that is seen as some point in time in 2106 (zip spec is unsigned)
+ * 0027 Extra ID #0001 5455 'UT: Extended Timestamp'
+ * 0029 Length 0005
+ * 002B Flags '01 mod'
+ * 002C Mod Time FFFFF1FA 'Sun Feb 7 06:28:26 2106'
+ * @throws Exception
+ */
+ @Test
+ void testReproducibleJar19700101() throws Exception {
+ long entryTime = testReproducibleJarEntryTime("1970", "10");
+ assertThat(entryTime).isGreaterThanOrEqualTo(0);
+ }
}