Re: Rewrite of JAR plugin ready for merge

"Martin Desruisseaux via dev" <[email protected]>
Newsgroups gmane.comp.jakarta.turbine.maven.devel
Message-ID <[email protected]>
Hello Sergey

I think that I see the problem. It you want to try by yourself, you can 
build again with `mvn ... -X`. Ignore the flood of logs emitted by 
Maven. The interesting part is that you should have a `target/jar.args` 
file containing all arguments given to the `jar` command. You can then 
reproduce as below:

    rm target/*.jar
    jar @target/jar.args

You can open `jar.args` in an editor and add/remove/edit arguments until 
you get the desired result. I tried on a small project. Notes:

  * The Maven JAR Plugin enumerates all files if there are
    include/exclude filters, or if reproducible build was requested (for
    enforcing a deterministic order). Otherwise, the plugin specifies
    only the root directory and the `jar` tool iterates itself over the
    entries.
  * If `target/jar.args` specifies only the root directory, the
    generated JAR contains all directory entries as expected.
  * If `target/jar.args` enumerates all files, the generated JAR
    contains only those files and is missing the directory entries.
  * If `target/jar.args` enumerates both files and directories, the
    files are ignored. The directory seems to have precedence: all files
    are included regardless the include/exclude filters, and the order
    is unspecified.

Can you try the following?

  * In `jar.args`, keep only one -C argument followed by the root
    directory and remove all other -C arguments (until the end of the file).
  * Run `jar @target/jar.args` and check if the result resolve the problem.

If this experiment is positive, it means that we may not be able to 
enforce reproducible build with the `jar` tool as it stands today. 
However, I would not consider that as a blocking issue, but rather as an 
encouragement to provides semantically equivalent builds rather than 
bit-to-bit reproducibility.

     Martin



Le 18/08/2026 à 16:49, Sergey Chernov a écrit :
> I've rechecked, the target problem is fixed indeed. But now I see another
> issue.
>
> I've built the JAR and it's not binary equal to the original one.
> The Spring Boot application fails to start, while everything looks ok on
> the first sight.
> I used Claude to binary compare old and new archives and it concluded
> interesting:
> ```
> Every class/resource entry matches by name, uncompressed size, and CRC-32.
> What differs:
>    - Directory entries: server3 jars contain them (com/, com/acme/, …);
> server2 jars omit them (770 jars).
> ```
> As a result, the spring boot application fails to discover some
> componentScan related components, which rely on JAR traversal.
> I can do more tests, but I believe this is quite close to being correct
> finding, which IMO is severe.
>
> I've rechecked with the master build of maven-jar-plugin, the problem is
> not there - so it's new.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.