[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: broken references in jar manifests
From: |
Chris Marusich |
Subject: |
Re: broken references in jar manifests |
Date: |
Mon, 19 Mar 2018 05:24:19 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Gábor Boskovits <address@hidden> writes:
> 2018-03-01 19:54 GMT+01:00 Ricardo Wurmus <address@hidden>:
>
>>
>> Gábor Boskovits <address@hidden> writes:
>>
>> > 2018-03-01 18:11 GMT+01:00 Ricardo Wurmus <address@hidden>
>> :
>> >
>> >> Hi Guix,
>> >>
>> >> we have a problem with jar manifests. When we use the Class-Path
>> >> property to ensure that an executable can find its dependencies on the
>> >> class path at run-time, we end up with a manifest like this:
>> >>
>> >> --8<---------------cut here---------------start------------->8---
>> >> Manifest-Version: 1.0
>> >> Class-Path: /gnu/store/i28vi94r8z9f0x02zgkrv87w16ibmqkw-java-htsjdk-2.
>> >> 10.1/share/java/htsjdk.jar
>> >> Created-By: 1.8.0_151 (Oracle Corporation)
>> >> Main-Class: picard.cmdline.PicardCommandLine
>> >> --8<---------------cut here---------------end--------------->8---
>> >>
>> >> Note that the Class-Path property is broken into two lines. This means
>> >> that the reference scanner will miss it and grafting will fail.
That is quite unfortunate. :-(
>> An alternative to recording full references in the manifest file is to
>> install a “lib” directory that contains symlinks to dependencies. The
>> manifest can then contain relative paths to these symlinks.
>>
>>
> I guess I would prefer to do this instead.
Sounds good to me, too.
Ricardo Wurmus <address@hidden> writes:
> A possible work-around might be to patch the class loader of our JDKs to
> look at a custom Guix-specific file, which we will include in each jar.
> That file would be allowed to have longer lines.
>
> There are two disadvantages:
>
> 1) we need to patch the JDK
> 2) the jars would not do the right thing when executed with a different
> JDK (e.g. on a foreign distro).
We shouldn't be afraid to experiment with a custom class loader. It may
turn out to be an effective way to "teach" Java how to follow store
references, and the class loader machinery is well pretty documented.
The tricks we (and Nix) do with the linker (e.g., ld-wrapper) to always
use rpaths for C programs and libraries is similar in spirit: if the
machine does not know our rules by default, we must teach the machine
how to play by our rules.
--
Chris
signature.asc
Description: PGP signature
Re: broken references in jar manifests, Ludovic Courtès, 2018/03/02
- Re: broken references in jar manifests, Danny Milosavljevic, 2018/03/20
- Re: broken references in jar manifests, julien lepiller, 2018/03/20
- Re: broken references in jar manifests, Danny Milosavljevic, 2018/03/20
- Re: broken references in jar manifests, Ricardo Wurmus, 2018/03/20
- Re: broken references in jar manifests, Danny Milosavljevic, 2018/03/21
- Re: broken references in jar manifests, Ricardo Wurmus, 2018/03/21
- [PATCH] Create INDEX.LIST; Was: Fix references in jar manifests, Danny Milosavljevic, 2018/03/25