web-dev-qa-db-fra.com

IcedTea-8 ne peut exécuter aucune application jnlp (peut-être en raison de openjdk-11?)

Je suis sur Ubuntu MATE 18.04. Toutes les applications jnlp que j'ai essayées donnent une erreur d'exécution. Après inspection, certaines bibliothèques semblent manquer dans Java.

J'ai donc tout supprimé, recommencé l'installation et constaté que le plug-in apt-get install icedtea-8-dépend de:

  ca-certificates-Java default-jre default-jre-headless icedtea-8-plugin
  icedtea-netx librhino-Java libtagsoup-Java openjdk-11-jre
  openjdk-11-jre-headless

Bien qu'il devrait dépendre de openjdk-8, pas de 11 (selon le site Web des paquets ubuntu). Je soupçonne que jdk-11 n'inclut pas certaines bibliothèques requises pour cela.

Je suppose que j'ai installé un PPA qui produit maintenant cette situation où jdk-11 est un choix plus à jour que n'importe quel package jdk-8. Alors, comment puis-je obtenir que icedtea-8 soit installé avec openjdk-8, et non 11?

EDIT: Ceci est la sortie lorsque j'essaie de lancer à partir de Firefox une application jnlp:

Denying permission: ("Java.lang.RuntimePermission" "accessClassInPackage.Sun.util.resources")
net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Could not launch JNLP file. The application has not been initialized, for more information execute javaws/browser from the command line and send a bug report.     at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.Java:582)
...
Running jdk9+ ?
Java.lang.ClassNotFoundException: Sun/misc/JarIndex
...
Java.io.FileNotFoundException: /home/roman/.config/icedtea-web/deployment.properties (No existe el archivo o el directorio)     at Java.base/Java.io.FileInputStream.open0(Native Method)

L'exception ClassNotFoundException: Sun/misc/JarIndex est ce qui m'a fait penser que cela est dû à la dépendance à jdk11, car cette classe semble avoir été supprimée dans Java 9.

J'ai essayé d'installer uniquement openjdk-8, puis j'ai créé icedtea à partir des sources. Néanmoins, quand j'ai fini, il n'a pas été détecté par Firefox (peut-être qu'une commande manquait).

Une idée?

Vous trouverez également ci-dessous la sortie de ces commandes (après avoir essayé d'installer en fonction de votre réponse):

roman@roman-desktop:~$ update-Java-alternatives -l
Java-1.11.0-openjdk-AMD64      1111       /usr/lib/jvm/Java-1.11.0-openjdk-AMD64
Java-1.8.0-openjdk-AMD64       1081       /usr/lib/jvm/Java-1.8.0-openjdk-AMD64
roman@roman-desktop:~$ which javaws
/usr/bin/javaws
5
Roman Rdgz

Après quelques essais et erreurs, je n'ai trouvé qu'une seule solution utile - nous devons installer OpenJDK 8 normal à partir d'Ubuntu 16.04 LTS précédent manuellement avec les commandes ci-dessous. Ce n'est généralement pas recommandé, mais nous n'avons pas d'autres méthodes avec un résultat positif.

Les commandes à installer sont donc les suivantes (nous supprimons OpenJDK existant puis installons les paquets deb manuellement):

Sudo apt purge Oracle-Java11-* -y
Sudo apt purge *openjdk* -y
Sudo apt autoremove --purge -y

wget http://mirrors.kernel.org/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre-headless_8u222-b10-1ubuntu1~16.04.1_AMD64.deb
Sudo apt install -y ./openjdk-8-jre-headless_8u222-b10-1ubuntu1~16.04.1_AMD64.deb

wget http://security.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1.1_AMD64.deb
Sudo apt install -y ./libpng12-0_1.2.54-1ubuntu1.1_AMD64.deb

wget http://mirrors.kernel.org/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre_8u222-b10-1ubuntu1~16.04.1_AMD64.deb
Sudo apt install -y ./openjdk-8-jre_8u222-b10-1ubuntu1~16.04.1_AMD64.deb

wget http://mirrors.kernel.org/ubuntu/pool/universe/i/icedtea-web/icedtea-netx-common_1.6.2-3ubuntu1_all.deb
Sudo apt install -y ./icedtea-netx-common_1.6.2-3ubuntu1_all.deb

wget http://mirrors.kernel.org/ubuntu/pool/universe/i/icedtea-web/icedtea-netx_1.6.2-3ubuntu1_AMD64.deb
Sudo apt install -y ./icedtea-netx_1.6.2-3ubuntu1_AMD64.deb

Nous devons également épingler/maintenir les versions de ces packages avec une seule commande longue ci-dessous:

cat <<EOF | Sudo tee /etc/apt/preferences.d/pin-Java8
Package: icedtea-netx
Pin: version 1.6.2-3ubuntu1
Pin-Priority: 1337

Package: icedtea-netx-common
Pin: version 1.6.2-3ubuntu1
Pin-Priority: 1337

Package: openjdk-8-jre
Pin: version 8u222-b10-1ubuntu1~16.04.1
Pin-Priority: 1337

Package: openjdk-8-jre-headless
Pin: version 8u222-b10-1ubuntu1~16.04.1
Pin-Priority: 1337

EOF

puis l'application s'exécutera avec

javaws StartProRealTime.jnlp

Notes: l'installation d'Oracle Java 11 ou 12 n'aide pas non plus.

5
N0rbert

Sur mon système, j'ai constaté que javaws essayait toujours d'utiliser jre-11 (ce qui ne fonctionnait pas), car le default-jre-headless (une dépendance de icedtea-netx) a créé un lien (qui n'était pas modifié par update-Java-alternatives).

$ javaws
selected jre: /usr/lib/jvm/default-Java

J'ai dû modifier manuellement cette symbolique pour pointer vers la version jre-8 afin que javaws s'exécute à nouveau.

2
deandrade87

J'ai pu définir Java-8 ou Java-11 par défaut.


$ Sudo update-Java-alternatives --jre --set Java-1.8.0-openjdk-AMD64
$ Sudo update-Java-alternatives --jre-headless --set Java-1.8.0-openjdk-AMD64
$ Sudo update-Java-alternatives --set Java-1.8.0-openjdk-AMD64
update-alternatives: error: no alternatives for appletviewer
update-alternatives: error: no alternatives for mozilla-javaplugin.so
update-Java-alternatives: jdk alternative does not exist: /usr/lib/jvm/Java-8-openjdk-AMD64/bin/appletviewer
update-Java-alternatives: jdk alternative does not exist: /usr/lib/jvm/Java-8-openjdk-AMD64/bin/jconsole
update-Java-alternatives: plugin alternative does not exist: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/lib/AMD64/IcedTeaPlugin.so

$ Sudo update-Java-alternatives --jre --set Java-1.11.0-openjdk-AMD64
$ Sudo update-Java-alternatives --jre-headless --set Java-1.11.0-openjdk-AMD64
$ Sudo update-Java-alternatives --set Java-1.11.0-openjdk-AMD64
update-alternatives: error: no alternatives for appletviewer
update-alternatives: error: no alternatives for mozilla-javaplugin.so

puis définissez correctement la variable Java_HOME par l'une des commandes


$ export Java_HOME=$(readlink -f /usr/bin/Java | sed "s:bin/Java::")
$ export Java_HOME=$(readlink -f /usr/bin/Java | sed "s:jre/bin/Java::")
$ echo $Java_HOME

Il vaut la peine de vérifier la valeur de la variable.

Lors de l'exécution


 $ javaws filename.jnpl

J'ai un avertissement et une réponse, y compris

netx: fichier jnlp non valide /home/phobos/express.jnpl

Express.jnpl est l'outil de modélisation express ARIS de https://www.ariscommunity.com/aris-express/download

Les réponses respectives sont


$ javaws ~/express.jnpl
selected jre: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/

(Java:11196): dbind-WARNING **: 19:40:56.468: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
netx: Invalid jnlp file /home/phobos/express.jnpl

$ javaws ~/express.jnpl
selected jre: /usr/lib/jvm/Java-11-openjdk-AMD64/
WARNING: package javax.jnlp not in Java.desktop
netx: Invalid jnlp file /home/phobos/express.jnpl

Reste maintenant à découvrir ce qui ne va pas avec le fichier jnpl ou avec ma configuration.

RESOLU - J'ai utilisé un nom de fichier incorrect. Il fonctionne maintenant.


$ javaws ~/express.jnlp
selected jre: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/
selected jre: /usr/lib/jvm/Java-8-openjdk-AMD64/jre/
Codebase matches codebase manifest attribute, and application is signed. Continuing. See: http://docs.Oracle.com/javase/7/docs/technotes/guides/jweb/security/no_redeploy.html for details.
Starting application [com.idsscheer.aris.expresslauncher.AExpressLauncher] ...
May 02, 2019 6:36:28 PM com.idsscheer.aris.common.ADebug println
INFO: [config] creating plugin.cfg from jar file

Fonctionne bien avec la version actuelle 8u212. Il reste à rendre le changement de nom Java_HOME permanent.

1
kovivox

Cela a évidemment à voir avec Oracle. J'ai désinstallé Oracle Java il y a longtemps. (Je n'ai pas encore trouvé la solution.) Je suis sur Ubuntu 19.04 en utilisant Unity.

Voir ci-dessous, en particulier "jre sélectionné"

$ update-Java-alternatives -l

Java-1.11.0-openjdk-AMD64      1111       /usr/lib/jvm/Java-1.11.0-openjdk-AMD64    
Java-1.8.0-openjdk-AMD64       1081       /usr/lib/jvm/Java-1.8.0-openjdk-AMD64

$ Java -version

openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu1, mixed mode, sharing)

$ which javaws    
/usr/bin/javaws

$ javaws    
selected jre: /usr/lib/jvm/Java-8-Oracle

thread 'main' panicked at 'Error spawning JVM process, Java executable: [/usr/lib/jvm/Java-8-Oracle], arguments: [["-splash:/usr/share/icedtea-web/javaws_splash.png", "-Xbootclasspath/a:/usr/share/icedtea-web/javaws.jar:/usr/share/Java/js.jar:/usr/share/Java/tagsoup.jar:/usr/lib/jvm/Java-8-Oracle/lib/ext/nashorn.jar:", "-classpath", "/usr/lib/jvm/Java-8-Oracle/lib/rt.jar:/usr/lib/jvm/Java-8-Oracle/lib/ext/jfxrt.jar:", "-Dicedtea-web.bin.name=javaws", "-Dicedtea-web.bin.location=/usr/lib/icedtea-web/bin/javaws", "net.sourceforge.jnlp.runtime.Boot"]]', src/os_access.rs:36:19
note: Run with `Rust_BACKTRACE=1` for a backtrace
1
kovivox

J'ai constaté qu'une ancienne installation Oracle avait continué de laisser les variables d'environnement définies:

% env | grep Oracle
Java_HOME=/usr/lib/jvm/Java-8-Oracle
J2REDIR=/usr/lib/jvm/Java-8-Oracle/jre
DERBY_HOME=/usr/lib/jvm/Java-8-Oracle/db
J2SDKDIR=/usr/lib/jvm/Java-8-Oracle

unsetter ceux créés javaws récupérer le JRE non Oracle.

0
nh2

J'ai corrigé cela en définissant le répertoire jdk8 dans le panneau de configuration icedtea. J'ai ouvert le panneau de configuration, je suis allé dans les paramètres JVM et j'ai rempli le champ avec:

/ usr/lib/jvm/Java-8-openjdk-AMD64

J'utilise Ubuntu 18.04 et j'ai installé à la fois jdk11 et jdk8. Normalement, Java-default est lié à jdk11, donc icedtea plantera en raison de la suppression de certaines classes.

0
Santi La Ruina