[ 
https://issues.apache.org/jira/browse/MJAR-300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17816368#comment-17816368
 ] 

Henning Schmiedehausen commented on MJAR-300:
---------------------------------------------

I can track this down to this line in plexus-archiver: 
[https://github.com/codehaus-plexus/plexus-archiver/blob/master/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java#L1090]

the correct Instant is passed into the method, then the JarArchiver instance 
ultimately delegates to the AbstractZipArchiver code here: 
[https://github.com/codehaus-plexus/plexus-archiver/blob/master/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java#L689-L694
 
|https://github.com/codehaus-plexus/plexus-archiver/blob/master/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java#L689-L694]which
 assumes that the timestamp is "millis since the epoch in the local timezone". 
However, the code calling this is passing in "millis since the epoch in UTC" 
after having converted the timestamp with timezone into UTC first.

this explains the "hours offset from UTC" discrepancy between the timestamp and 
the actual entries in the jar. 

There is ambiguity between the plexus 
Archiver#configureReproducibleBuild(FileTime lastModifiedTime) method and the 
implementation in the AbstractZipArchiver. While the former seems to require 
the correct timezone, the latter, at least in the zip archiver case, seems to 
ignore it. 

 

> maven jar plugin does not interpret build outputTimestamp correctly
> -------------------------------------------------------------------
>
>                 Key: MJAR-300
>                 URL: https://issues.apache.org/jira/browse/MJAR-300
>             Project: Maven JAR Plugin
>          Issue Type: Bug
>    Affects Versions: 3.3.0
>            Reporter: Henning Schmiedehausen
>            Priority: Major
>
> consider a minimal project that packages a jar:
> % DATE=$(date -Iseconds) ; echo $DATE ; mvn -q clean package ; jar tvf 
> target/jartest-0.1-SNAPSHOT.jar
> 2024-02-10T21:44:53-08:00
>      0 Sat Feb 10 21:44:54 PST 2024 META-INF/
>    568 Sat Feb 10 21:44:54 PST 2024 META-INF/MANIFEST.MF
>      0 Sat Feb 10 21:44:54 PST 2024 META-INF/maven/
>      0 Sat Feb 10 21:44:54 PST 2024 META-INF/maven/jartest/
>      0 Sat Feb 10 21:44:54 PST 2024 META-INF/maven/jartest/jartest/
>      5 Sat Feb 10 21:44:54 PST 2024 testfile.txt
>    575 Sat Feb 10 21:39:50 PST 2024 META-INF/maven/jartest/jartest/pom.xml
>     56 Sat Feb 10 21:44:54 PST 2024 
> META-INF/maven/jartest/jartest/pom.properties
> Note how the timestamp returned by the date command and the timestamps of the 
> entries in the jar are basically the same (around 21:44:53 - 21:44:54 on Feb 
> 10th, 2024)
> Now use that date as the project build timestamp:
> DATE=$(date -Iseconds) ; echo $DATE ; mvn -q 
> -Dproject.build.outputTimestamp=$DATE clean package ; jar tvf 
> target/jartest-0.1-SNAPSHOT.jar
> 2024-02-10T21:46:30-08:00
>      0 Sun Feb 11 05:46:30 PST 2024 META-INF/
>    568 Sun Feb 11 05:46:30 PST 2024 META-INF/MANIFEST.MF
>      0 Sun Feb 11 05:46:30 PST 2024 META-INF/maven/
>      0 Sun Feb 11 05:46:30 PST 2024 META-INF/maven/jartest/
>      0 Sun Feb 11 05:46:30 PST 2024 META-INF/maven/jartest/jartest/
>      5 Sun Feb 11 05:46:30 PST 2024 testfile.txt
>    575 Sun Feb 11 05:46:30 PST 2024 META-INF/maven/jartest/jartest/pom.xml
>     56 Sun Feb 11 05:46:30 PST 2024 
> META-INF/maven/jartest/jartest/pom.properties
>  
> The timestamp and the entries in the jar differ by eight hours (the offset of 
> my local timezone).
> When forcing UTC:
> DATE=$(TZ=UTC date -Iseconds) ; echo $DATE ; mvn -q 
> -Dproject.build.outputTimestamp=$DATE clean package ; jar tvf 
> target/jartest-0.1-SNAPSHOT.jar
> 2024-02-11T05:48:22+00:00
>      0 Sun Feb 11 05:48:22 PST 2024 META-INF/
>    568 Sun Feb 11 05:48:22 PST 2024 META-INF/MANIFEST.MF
>      0 Sun Feb 11 05:48:22 PST 2024 META-INF/maven/
>      0 Sun Feb 11 05:48:22 PST 2024 META-INF/maven/jartest/
>      0 Sun Feb 11 05:48:22 PST 2024 META-INF/maven/jartest/jartest/
>      5 Sun Feb 11 05:48:22 PST 2024 testfile.txt
>    575 Sun Feb 11 05:48:22 PST 2024 META-INF/maven/jartest/jartest/pom.xml
>     56 Sun Feb 11 05:48:22 PST 2024 
> META-INF/maven/jartest/jartest/pom.properties
> The timestamp is "correct" but I passed it in as UTC but the jar plugin 
> considers it "local time" and silently attaches PST as timezone. This is 
> where the eight hours discrepancy come from.
> This seems to be specific to the outputTimestamp parsing of the jar plugin. 
>  
>  
>  
>  
>  
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to