Skip to content

Layertools extract does not preserve last modified and last access times #28167

@alegacy

Description

@alegacy

I am using the layered jar file approach to reduce the amount of data included in the context sent to the docker daemon. The Docker buildkit [1] functionality adds some intelligence around which files are sent to the Docker daemon. Unfortunately, rather than examining file checksums it appears to be looking at file timestamps. Extracting of the jar file layers using the following command does not preserve file timestamps therefore the entire set of dependency jar files is sent to the daemon each time a build is performed.

java -Djarmode=layertools -jar my-uber-jar.jar extract

I asked this question over on SO and was referred here [2].

Running that command and then checking the timestamps produces this:

$ java -Djarmode=layertools -jar my-uber-jar.jar  extract 
$ ls -l dependencies/BOOT-INF/lib/commons-*
-rw-r--r--  1 legacy  staff   327K Oct  1 09:23 dependencies/BOOT-INF/lib/commons-codec-1.11.jar
-rw-r--r--  1 legacy  staff   204K Oct  1 09:23 dependencies/BOOT-INF/lib/commons-io-2.5.jar
-rw-r--r--  1 legacy  staff   490K Oct  1 09:23 dependencies/BOOT-INF/lib/commons-lang3-3.8.1.jar
-rw-r--r--  1 legacy  staff    60K Oct  1 09:23 dependencies/BOOT-INF/lib/commons-logging-1.2.jar
-rw-r--r--  1 legacy  staff   2.1M Oct  1 09:23 dependencies/BOOT-INF/lib/commons-math3-3.6.1.jar

...and then running it again ~5 minutes later it produces a fresh set of timestamps:

$ java -Djarmode=layertools -jar my-uber-jar.jar extract 
$ ls -l dependencies/BOOT-INF/lib/commons-*
-rw-r--r--  1 legacy  staff   327K Oct  1 09:29 dependencies/BOOT-INF/lib/commons-codec-1.11.jar
-rw-r--r--  1 legacy  staff   204K Oct  1 09:29 dependencies/BOOT-INF/lib/commons-io-2.5.jar
-rw-r--r--  1 legacy  staff   490K Oct  1 09:29 dependencies/BOOT-INF/lib/commons-lang3-3.8.1.jar
-rw-r--r--  1 legacy  staff    60K Oct  1 09:29 dependencies/BOOT-INF/lib/commons-logging-1.2.jar
-rw-r--r--  1 legacy  staff   2.1M Oct  1 09:29 dependencies/BOOT-INF/lib/commons-math3-3.6.1.jar

[1] https://docs.docker.com/develop/develop-images/build_enhancements/
[2] https://stackoverflow.com/questions/69406916/java-layertools-extract-does-not-preserve-timestamps

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions