我正在使用Oracle「自包含應用程序打包」工具爲JavaFX 8桌面應用程序生成.deb
文件。生成的軟件包文件可以在Ubuntu上安裝而不會出現問題,但是應用程序無法運行。該文件的安裝步驟如下:沒有JRE的JavaFX DEB軟件包不起作用
$ 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。
我在Ubuntu 14.04上使用JDK 1.8.0_92測試它。
這可能是同樣的事情,在[我的問題](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
嗨@hotzst。感謝問題的鏈接。當然,它看起來相關,因爲錯誤消息是相似的。在閱讀你的答案後,我不清楚你做了什麼來解決問題。你能建議我如何應用你所做的來解決這個問題嗎? – Adam
第一步是確定問題是否與可執行jar或啓動程序。要做到這一點,用'java -jar ...'執行jar文件。如果它是啓動器,它可能與配置有關。在我的情況下,cfg文件無法解析,因爲它是從包含'.'的應用程序名稱計算出來的。 Linux可執行文件不要求特定的文件後綴可執行,Windows可以。 – hotzst