Я использую инструмент Oracle «Self-Contained Application Packaging», чтобы сделать файл .deb
для настольного приложения JavaFX 8. Сгенерированный файл пакета может быть установлен без проблем на Ubuntu, но затем приложение не запускается. Файл устанавливается следующим образом:JavaFX DEB Bundle Without JRE не работает
$ sudo dpkg -i vocabhunter-1.0.14.deb
Однако попытки запустить приложение генерирует следующее сообщение об ошибке:
$ /opt/VocabHunter/VocabHunter
VocabHunter Failed to locate JNI_CreateJavaVM
VocabHunter Failed to launch JVM
Важно отметить, что я генерации сверток без JRE включены и исследования, кажется, что проблема связана с этим. Созданный файл /opt/VocabHunter/app/VocabHunter.cfg
содержит следующую строку:
app.runtime=
Если я изменить это и добавить путь к Java, программа запускает без проблем. В качестве временного решения, я предположил, что после установки .deb
свертка пользователя выполнить следующую команду:
sudo sed -i "s|app.runtime=.*|app.runtime=$JAVA_HOME|g" /opt/VocabHunter/app/VocabHunter.cfg
Однако это делает вещи трудно для пользователя. Кто-нибудь знает, как исправить конфигурацию для инструмента упаковки JavaFX, чтобы избежать этой проблемы?
В сборке используется Gradle для вызова скрипта Ant для создания пакета. Gradle заполняет все необходимые переменные. Ant скрипт выглядит следующим образом:
<project name="VocabHunter Packaging" basedir=""
xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property environment="env"/>
<property name="JAVA_HOME" value="${env.JAVA_HOME}"/>
<target name="jfxbundle" description="Build the application bundle">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>
<fx:deploy outdir="${basedir}/build"
nativeBundles="${packageType}">
<fx:platform basedir=""/>
<fx:application id="VocabHunterId"
name="VocabHunter"
mainClass="${mainClass}"
version="${version}"/>
<fx:resources>
<fx:fileset dir="${basedir}/build/libs"/>
</fx:resources>
<fx:info title="VocabHunter">
<fx:association description="VocabHunter session"
extension="wordy"
mimetype="application/x-vnd.VocabHunterSession"
icon="${sessionIcon}"/>
</fx:info>
<fx:bundleArgument arg="icon"
value="${appIcon}"/>
<fx:bundleArgument arg="mac.CFBundleVersion"
value="${version}"/>
<fx:bundleArgument arg="launcher-cfg-format"
value="prop"/>
</fx:deploy>
</target>
</project>
Вы можете увидеть полный сценарий в контексте here.
Я тестирую это с помощью JDK 1.8.0_92 на Ubuntu 14.04.
Это может быть тем же самым, как и в [моем вопросе ] (http://stackoverflow.com/questions/32795309/linux-executable-fails-using-javafx-maven-plugin). Также рассмотрите два отчета об ошибках https://bugs.openjdk.java.net/browse/JDK-8143314 и https://bugs.openjdk.java.net/browse/JDK-8143934. Последнее должно быть разрешено с помощью 8u76. – hotzst
Hi @hotzst. Спасибо за ссылку на вопрос. Конечно, это похоже на то, что сообщения об ошибках похожи.Я не понимаю после прочтения вашего ответа, что вы сделали, чтобы решить проблему. Можете ли вы предложить, как я могу применить то, что вы сделали для решения этой проблемы? – Adam
Первый шаг - определить, является ли проблема с исполняемым банком или пусковой установкой. Для этого выполните jar-файл с помощью java -jar ... '. Если это пусковая установка, это может быть связано с конфигурацией. В моем случае файл cfg не может быть разрешен, поскольку он вычисляется из имени приложения, которое содержит '.'. Для исполняемого файла Linux не требуется, чтобы определенный суффикс файла был исполняемым, Windows делает это. – hotzst