Я нахожусь на 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
Это, очевидно, связано со ссылкой на 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
После некоторых проб и ошибок я нашел только одно полезное решение - нам нужно вручную установить обычный 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 также не помогает.
Мне удалось установить по умолчанию 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 постоянным.
В моей системе я нашел, что javaws
все еще пытался использовать jre-11 (который не работал), потому что default-jre-headless
(зависимость icedtea-netx
) создал ссылку (который не изменялся update-java-alternatives
).
$ javaws
selected jre: /usr/lib/jvm/default-java
я должен был вручную изменить это символьное для указания на jre-8 версию, чтобы иметь javaws
выполнение снова.
Я зафиксировал это путем установки jdk8 каталога в icedtea панели управления. Я открыл панель управления, перешел к настройкам JVM и заполнил поле:
/usr/lib/jvm/java-8-openjdk-amd64
я запускаю Ubuntu 18.04 и имею и jdk11 и установленный jdk8. Обычно, значение по умолчанию Java связано с jdk11, таким образом, icedtea откажет из-за некоторых удаляемых классов.
Я нашел, что старая установка 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.