[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