JavaFX 应用程序包版本号

JavaFX Application Bundle Version Number

我正在使用 JDK 附带的 Oracle 工具为 JavaFX 8 应用程序创建可安装包。在 Mac 上创建了一个 .dmg 文件,在 Linux 上使用了一个 .deb 文件。我从 Gradle 调用 Ant 脚本来创建包。我遇到的问题是捆绑包中包含的版本号始终为 1.0 而不是我指定的版本。 Ant脚本相关部分如下:

<project name="VocabHunter Packaging" basedir=""
         xmlns:fx="javafx:com.sun.javafx.tools.ant">

    <target name="jfxbundle" description="Build the application bundle">
        <fx:deploy outdir="${basedir}/build"
                   nativeBundles="${packageType}">

            <fx:application refId="VocabHunterId"
                            version="${version}"/>

            <fx:bundleArgument arg="mac.CFBundleVersion"
                               value="${version}"/>
            ...
        </fx:deploy>
        ...
    </target>
    ...
</project>

您可以在上下文中查看完整脚本 here

在 Mac 上,右键单击应用程序图标并选择“获取信息”显示 1.0 而不是正确的版本号,如下面的屏幕截图所示:

同样,在 Linux 上,版本号在安装 .deb 文件期间显示为 1.0:

有谁知道如何修复 Ant 脚本以便显示正确的版本?

我在 Mac 和 LInux.

上都使用 Oracle JDK 1.8.0_66

查看 Ant task reference,表明在 fx:application 上提到了版本属性。

您可能会在清单中定义版本,但我不确定这是否会以所需的方式显示。

我终于解决了这个问题。这个问题看起来是由我有一个 <fx:application> 元素和一个 refid 属性引用单独的 <fx:application> 的事实引起的。解决方案是将这两个 <fx:application> 元素合并为一个元素,如下所示:

<fx:application id="VocabHunterId"
                name="VocabHunter"
                mainClass="${mainClass}"
                version="${version}"/>

我发现出于某种原因我必须包含 id="VocabHunterId" 属性:没有它文件关联不起作用。

我已经测试过了,它可以很好地显示 OS X 10.11.4 和 Oracle JDK 1.8.0_77 上已安装包的版本号Ubuntu 14.04 也与 Oracle JDK 1.8.0_77。如果您想在上下文中查看完整脚本(包括此修复程序),可以找到它 here.