[Trisquel-devel] [PATCH 5/5] Fix proguard runtime with java pointing to Java 8

Pablo Correa Gomez ablocorrea at hotmail.com
Fri Sep 10 19:45:11 CEST 2021


It would be great if in the changelog you could mention that the reason
is that "Trisquel 9 has at least two java runtimes". This would help
maintainability, as we could easily identify if the helper has to be
updated or removed for the next Trisquel release.

On Fri, 2021-09-03 at 18:53 +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.
> 
> 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..b8a55cf
> --- /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 "Fix proguard when java points to Java 8"
> +
> +compile



More information about the Trisquel-devel mailing list