From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ricardo Wurmus Subject: broken references in jar manifests Date: Thu, 1 Mar 2018 18:11:59 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:38103) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1erRtN-0000cl-6L for guix-devel@gnu.org; Thu, 01 Mar 2018 12:21:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1erRtK-000068-HL for guix-devel@gnu.org; Thu, 01 Mar 2018 12:21:17 -0500 Received: from pegasus.bbbm.mdc-berlin.de ([141.80.25.20]:50874) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1erRtK-0008TB-5v for guix-devel@gnu.org; Thu, 01 Mar 2018 12:21:14 -0500 Received: from localhost (localhost [127.0.0.1]) by pegasus.bbbm.mdc-berlin.de (Postfix) with ESMTP id 058A57B30D0 for ; Thu, 1 Mar 2018 18:21:11 +0100 (CET) Received: from pegasus.bbbm.mdc-berlin.de ([127.0.0.1]) by localhost (pegasus.bbbm.mdc-berlin.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hsuuBlJ6n7Aa for ; Thu, 1 Mar 2018 18:21:05 +0100 (CET) Received: from HTCATWO.mdc-berlin.net (puck.citx.mdc-berlin.de [141.80.36.101]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pegasus.bbbm.mdc-berlin.de (Postfix) with ESMTPS for ; Thu, 1 Mar 2018 18:21:05 +0100 (CET) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org 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. Breaking up lines longer than 70 characters is according to the manifest specification, see https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html We cannot just use a wrapper that sets CLASSPATH, because it appears to be ignored when using a manifest with =E2=80=9CMain-Class=E2=80=9D. =E2=80= =9CMain-Class=E2=80=9D is required for executables that can be run like this: java -jar whatever.jar 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). What do you think? -- Ricardo