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
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.
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.
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.
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
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
unset
ter ceux créés javaws
récupérer le JRE non Oracle.
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.