JDK-8371855 : Time stamps are missing on zip bundles with gradle 9
  • Type: Bug
  • Component: javafx
  • Sub-Component: build
  • Affected Version: jfx26
  • Priority: P4
  • Status: In Progress
  • Resolution: Unresolved
  • Submitted: 2025-11-13
  • Updated: 2025-12-09
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
jfx26Unresolved
Related Reports
Causes :  
Description
With the update to gradle 9, zip tasks no longer record the timestamp of the files in the zip archive.

According to the gradle 9 docs, this is deliberate:

https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default

> Files have fixed timestamps (timestamps depends on the archive type).

Comments
A pull request was submitted for review. Branch: master URL: https://git.openjdk.org/jfx/pull/1993 Date: 2025-12-01 10:27:10 +0000
01-12-2025

This is most noticeable on Windows, since we publish the `.zip` bundles for that platform on jdk.java.net. See, for example the SDK bundle for Windows / x64 on: https://jdk.java.net/javafx26/ However, it is platform-independent; the zip bundles produced on all platforms have the wrong time stamps.
13-11-2025

We already define the use of the `SOURCE_DATE_EPOCH` env var to specify a build time stamp and enforce reproducible builds. When that flag is not set, we want time stamps to be preserved in the build. When it is set, we should continue to use the fixed timestamp. the following block in build.gradle will likely need an "else" clause to restore time stamps: // Normalizes the ZIP and JAR archives tasks.withType(Zip) { if (sourceDateEpoch != null) { preserveFileTimestamps = false reproducibleFileOrder = true doLast { setFileTimestamps(archiveFile, buildInstant) } } }
13-11-2025