当前位置: 首页 > 知识库问答 >
问题:

用于Mac的JavaFX自包含应用程序打包,不使用JRE

杭英杰
2023-03-14
ant.importBuild 'mac-bundle-ant.xml'
<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:application id="VocabHunterId"
                        name="VocabHunter"
                        mainClass="io.github.vocabhunter.gui.distribution.PackagedVocabHunter"/>

        <fx:resources id="applicationResourcesId">
            <fx:fileset dir="${basedir}/build/libs"/>
        </fx:resources>

        <fx:deploy outdir="${basedir}/build"
                   nativeBundles="image">

            <fx:platform basedir=""/>

            <fx:application refId="VocabHunterId"/>

            <fx:resources refid="applicationResourcesId"/>

            <fx:info title="VocabHunter">
                <fx:association description="VocabHunter session"
                                extension="wordy"
                                mimetype="application/x-vnd.VocabHunterSession"
                                icon="${basedir}/icons/mac/VocabHunterSession.icns"/>
            </fx:info>

            <fx:bundleArgument arg="icon"
                               value="${basedir}/icons/mac/VocabHunter.icns"/>

        </fx:deploy>

    </target>

</project>
app.runtime=$APPDIR/PlugIns/Java.runtime
jfxbundle.doLast {
    FileTree tree = fileTree(dir: 'build/bundles').include('**/*.cfg')
    tree.each {File file ->
        String content = file.text.replaceAll('(?m)^app\\.runtime=.*$\n', '')
        file.write(content)
    }
}

为了完整起见,我使用Oracle JDK 1.8.0_66 for Mac。

共有1个答案

袁鸿畴
2023-03-14

这个bug从Java1.8.0Update60开始存在,我已经报告过了,但还不是正式的bug。

问题是内部打包器使用INI-file-format,您可以在这里看到我的发现。

您应该能够将bundle-argument“launcher-cfg-format”的值设置为“prop”(如这里所示)

        <fx:bundleArgument arg="launcher-cfg-format" value="prop"/>
 类似资料:
  • 我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用

  • 按照这里和这里的指示。我使用的是JDK7U9和NetBeans 7.2.1。我所做的是创建相对于我的项目根文件夹的整个路径(C:\users\administrator\desktop\icotest\package\windows\icotest.ico)。我同时尝试了48x48和256x256的大小。下面是我的项目Icotest的树状结构概述: 这就是build.xml的样子:

  • 为缓解 Windows 下路径名过长的 问题, 略微加快一下 require的速度以及隐藏你的源代码,你可以选择把你的应用打包成 asar档案文件,这只需要对你的源代码做一些很小的改动。 大部分用户可以毫不费力地使用这个功能,因为它electron-packager,、electron-forge和electron-builder中都得到了支持,开箱即用。 如果你没有使用这些工具中的任何一个,那么

  • 问题内容: 我看过一些在线演示,其中简要提到了Java 9中的独立应用程序,但是我有一个问题需要解决。 使用新的模块系统,现在只允许包含运行应用程序所需的最少代码量。但是,希望运行该应用程序的系统是否仍然需要JRE,或者该程序的基本模块中可以包含某些内容? 我怀疑是后者,因为下载Java最新版本的页面(此处)仍然显示版本8_151。 TL; DR-使用Java 9,是否可以创建一个自包含的可执行文

  • 我有一个Java8应用程序,它使用JavaFX,主类扩展了JavaFX.application.application。目前,我将它作为一个fat jar交付,它在Oracle Java8上运行良好。 现在我希望它能够在OpenJDK11上运行。为了添加JavaFX,我已经将org.openjfx中的工件添加到类路径中,并将它们包含在fat JAR中。如果我从命令行启动我的jar,我会得到 脏的一