IcedTea-8 не может запустить любое приложение jnlp (может быть, из-за openjdk-11?)

Я нахожусь на Ubuntu MATE 18.04. Все приложения jnlp, которые я пробовал, дают ошибку выполнения. После проверки некоторые библиотеки, по-видимому, отсутствуют в Java.

Поэтому я удалил все, снова запустил установку и обнаружил, что apt-get install icedtea-8-plugin зависит от:

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

Хотя ожидается, что он будет зависеть от openjdk-8, а не 11 ( в соответствии с сайтами пакетов Ubuntu). Я подозреваю, что jdk-11 не включает в себя некоторые библиотеки, необходимые для этого.

Я предполагаю, что я установил некоторый PPA, который теперь создает такую ​​ситуацию, когда jdk-11 является более современным выбором, чем любой пакет jdk-8. Итак, как мне добиться, чтобы icedtea-8 была установлена ​​с openjdk-8, а не с 11?

РЕДАКТИРОВАТЬ: Это вывод, когда я пытаюсь запустить из firefox приложение 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)

ClassNotFoundException: sun / misc / JarIndex - это то, что заставило меня задуматься из-за зависимости от jdk11, так как этот класс, кажется, был удален в Java 9.

Я попытался установить только openjdk-8, а затем собрать icedtea из исходного кода. Тем не менее, когда я закончил, это не было обнаружено firefox (возможно, какая-то команда отсутствовала).

Есть идеи?

Также найдите под выводом этих команд (после попытки установки в соответствии с вашим ответом):

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
задан 19 April 2019 в 15:13

6 ответов

Это, очевидно, связано со ссылкой на Oracle. Я удалил Oracle Java давно. (Я пока не нашел решения.) Я на Ubuntu 19.04 использую Unity.

См. Ниже, в частности, «выбранный JRE»

$ 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
0
ответ дан 19 April 2019 в 15:13

После некоторых проб и ошибок я нашел только одно полезное решение - нам нужно вручную установить обычный OpenJDK 8 из предыдущей Ubuntu 16.04 LTS с помощью приведенных ниже команд. Обычно это не рекомендуется, но у нас нет других методов с положительным результатом.

Итак, команды для установки следующие (мы удаляем существующий OpenJDK, а затем устанавливаем deb-пакеты вручную):

sudo apt purge oracle-java11-* -y
sudo apt purge *openjdk* -y
sudo apt autoremove --purge -y

wget http://security.ubuntu.com/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre-headless_8u191-b12-2ubuntu0.16.04.1_amd64.deb
sudo apt install ./openjdk-8-jre-headless_8u191-b12-2ubuntu0.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 ./libpng12-0_1.2.54-1ubuntu1.1_amd64.deb

wget http://security.ubuntu.com/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre_8u191-b12-2ubuntu0.16.04.1_amd64.deb
sudo apt install ./openjdk-8-jre_8u191-b12-2ubuntu0.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 ./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 ./icedtea-netx_1.6.2-3ubuntu1_amd64.deb

Также нам нужно закрепить / сохранить версии таких пакетов с помощью одной длинной команды ниже:

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 8u191-b12-2ubuntu0.16.04.1
Pin-Priority: 1337

Package: openjdk-8-jre-headless
Pin: version 8u191-b12-2ubuntu0.16.04.1
Pin-Priority: 1337

EOF

, а затем приложение будет работать с

javaws StartProRealTime.jnlp

Примечания: установка Oracle Java 11 или 12 также не помогает.

0
ответ дан 19 April 2019 в 15:13

Мне удалось установить по умолчанию java-8 или java-11.


$ 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

и затем правильно установите переменную JAVA_HOME с помощью одной из команд


$ 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

Стоит проверить переменную значение.

При выполнении


 $ javaws filename.jnpl

я получил несколько предупреждений и ответов, включая

netx: недопустимый файл jnlp /home/phobos/express.jnpl

express.jnpl - это инструмент экспресс-моделирования ARIS от https://www.ariscommunity.com/aris-express/download

Соответствующие ответы:


$ 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

Теперь осталось выяснить, что не так eithwer с файлом jnpl или с моей конфигурацией.

решено - я использовал неправильное имя файла. Это работает сейчас.


$ 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

Работает нормально с текущей версией 8u212. Осталось сделать изменение имени JAVA_HOME постоянным.

0
ответ дан 19 April 2019 в 15:13

В моей системе я нашел, что javaws все еще пытался использовать jre-11 (который не работал), потому что default-jre-headless (зависимость icedtea-netx) создал ссылку (который не изменялся update-java-alternatives).

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

я должен был вручную изменить это символьное для указания на jre-8 версию, чтобы иметь javaws выполнение снова.

0
ответ дан 25 October 2019 в 14:54

Я зафиксировал это путем установки jdk8 каталога в icedtea панели управления. Я открыл панель управления, перешел к настройкам JVM и заполнил поле:

/usr/lib/jvm/java-8-openjdk-amd64

я запускаю Ubuntu 18.04 и имею и jdk11 и установленный jdk8. Обычно, значение по умолчанию Java связано с jdk11, таким образом, icedtea откажет из-за некоторых удаляемых классов.

0
ответ дан 23 November 2019 в 08:58

Я нашел, что старая установка Oracle продолжила оставлять набор переменных среды:

% 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звон сделанные javaws возьмите JRE не-Oracle.

0
ответ дан 23 November 2019 в 08:58

Другие вопросы по тегам:

Похожие вопросы: