Subject: Re: bug#58591: Java packages do not appear to keep a reference to their inputs

From: Julien Lepiller <[email-masked]>
Date: Tue, 18 Oct 2022 17:32:32 +0200

Hi, replying to a few emails at once.

The ant-build-system uses zip -0 to produce an uncompressed archive. By default, jar produces a compressed one, so there's a repack phase for that:
 http://git.savannah.nongnu.org/cgit/guix.git/tree/guix/build/ant-build-system.scm#n226

Embedding the classpath in the manifest is possible but would not have the expected effect. That's because a line in the manifest cannot exceed 72 bytes (see "line length" in https://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Notes_on_Manifest_and_Signature_Files), so the classpath will look like:

Class-Path: ../../../1234567891011
 1213141516/share/java/foo.jar

Although java would read that fine, the grafter will not see it, nor be able to graft foo in a meaningful manner: java would still use the ungrafted version even if another file references foo.

Le 18 octobre 2022 16:56:01 GMT+02:00, Maxim Cournoyer <[email-masked]> a écrit :
>Hello,
>
>Maxim Cournoyer <[email-masked]> writes:
>
>> Tobias Geerinckx-Rice <[email-masked]> writes:
>
>[...]
>
>>> Groan.  Which package(s) compress .jars?
>>
>> Oh, aren't they all?  I hadn't realized .jar compression was optional.
>
>Actually, reading [0] again, it seems a JAR *is* a zip archive, so
>cannot be either compressed or uncompressed.
>
>[0]  https://docs.oracle.com/en/java/javase/19/docs/specs/jar/jar.html
>
>-- 
>Thanks,
>Maxim