[Trisquel-devel] [PATCH v2 2/2] Fix proguard runtime with java pointing to Java 8
Pablo Correa Gomez
ablocorrea at hotmail.com
Mon Sep 20 17:25:55 CEST 2021
LGTM, thank you for your contribution!
On Mon, 2021-09-20 at 02:36 +0200, Denis 'GNUtoo' Carikli wrote:
> Trisquel 9 has at least two java runtimes: java-8-openjdk and
> java-11-openjdk.
>
> When configuring update-alternatives to use java-8-openjdk, we
> have the following error when running 'proguard':
> Error: A JNI error has occurred, please check your installation
> and try again
> Exception in thread "main"
> java.lang.UnsupportedClassVersionError:
> proguard/ProGuard has been compiled by a more recent version of
> the Java Runtime (class file version 53.0), this version of the
> Java Runtime only recognizes class file versions up to 52.0
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
> at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
> 2)
> at
> java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
> at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
> at
> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
> at
> sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
>
> This problem isn't theorical as we need Java 8 to build Replicant 6.0
> under Trisquel 9, but we also need proguard to work.
>
> This happens because of the combination of two things:
> - /usr/bin/proguard has the following content:
> #!/bin/sh
>
> exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@"
> So it uses the Java selected by update-alternatives, which could be
> java-8-openjdk.
> - The debian/control file uses the default-jdk package to build
> proguard, so it probably build it for newer Java runtimes.
> Changing the java versions in debian/control isn't sufficient to
> make it work with Java 8.
>
> The solution we chose here is to make sure that it uses Java 11
> when running. This way we don't need to modify extensively the
> package and we end up with less risk of breakages.
>
> BugLink: https://trisquel.info/en/issues/28177
> Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo en cyberdimension.org>
> ---
> helpers/make-proguard | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
> create mode 100644 helpers/make-proguard
>
> diff --git a/helpers/make-proguard b/helpers/make-proguard
> new file mode 100644
> index 0000000..8b7c66f
> --- /dev/null
> +++ b/helpers/make-proguard
> @@ -0,0 +1,32 @@
> +#!/bin/sh
> +#
> +# Copyright (C) 2021 Denis 'GNUtoo' Carikli <
> GNUtoo en cyberdimension.org>
> +#
> +# This program is free software; you can redistribute it and/or
> modify
> +# it under the terms of the GNU General Public License as
> published by
> +# the Free Software Foundation; either version 2 of the License,
> or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public
> License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
> MA 02110-1301 USA
> +#
> +
> +VERSION=1
> +
> +. ./config
> +
> +sed \
> + 's#^exec java #exec /usr/lib/jvm/java-11-openjdk-amd64/bin/java
> #' \
> + -i ./debian/scripts/proguard
> +
> +sed 's/default-jre/openjdk-11-jre/g' -i debian/control
> +
> +changelog "Always use Java 11 because Trisquel 9 also has Java 8
> which can't run classes compiled by Java 11"
> +
> +compile
More information about the Trisquel-devel
mailing list