如何为没有本机安装程序的JavaFX应用程序创建可运行的jar

时间:2014-04-16 18:37:37

标签: java eclipse ant jar javafx

我有一个应用程序可以正常运行" java -jar blah.jar"从Eclipse导出为可运行的jar后,让它"将所需的库打包到生成的JAR"。

我添加了一些JavaFX代码来弹出Web浏览器。现在似乎不可能制作一个可以在小型Java版本中运行的可运行jar。当我将它导出为可运行的jar时,它会复制到我的次要版本特有的jfxrt.jar中。如果我使用" java -jar blah.jar"运行这个jar。对于完全匹配的java版本(jdk1.7.0_17)然后它工作正常,但如果我使用一个稍微更新(jdk1.7.0_45),那么它无法正确解析swingx类。非常适合"写一次在任何地方运行"。

我尝试使用JavaFX ant任务,但我无法完成实际打包从属jar的任务。这实际上并没有在它创建的jar中包含fx:resources jar,就像魔法eclipse"将所需的库打包到生成的JAR"做得很好:

<fx:jar destfile="${dist}/${dist.jar}"> 
        <fx:application id="BlahTesterApp" 
            mainClass="blah.MainClass" 
            toolkit="swing"/> 

        <fileset dir="${build}"/> 

        <fx:resources> 
            <fx:fileset dir="${lib}" includes="**/*.jar" />
        </fx:resources>

        <manifest> 
            <attribute name="Implementation-Vendor" value="My Team"/>
            <attribute name="Implementation-Title" value="Tester App"/> 
        </manifest> 
    </fx:jar> 

似乎只能创建&#34;原生捆绑&#34;这是我不想要的。我不想让用户在以前能够运行darn jar时安装rpm或deb。

我不明白为什么Oracle必须在这里引入自己神奇的额外部署层。他们不希望人们使用JavaFX吗?

1 个答案:

答案 0 :(得分:9)

JavaFX打包替代方案

  1. 按照e(fx)clipse tutorial使用Eclipse为JavaFX应用程序创建可执行jar文件。
  2. Oracle java打包ant任务和javafxpackager工具可以创建可执行jar(在Oracle文档中描述为standalone applications)。如果您无法使用这些工具生成此类罐子,那么您可能无法正确使用这些工具。
  3. 需要最低版本的Java 8,其中jfxrt.jar(即JavaFX类)位于引导类路径上。
  4. 使用第三方构建工具链,例如JavaFX Maven pluginJavaFX Gradle plugin
  5. 备用(1),e(fx)clipse包装,因为您使用的是Eclipse,所以建议您使用它。

    <强>建议

    永远不要尝试在您的应用程序中包含Java平台库(例如jfxrt.jar)。您在互联网上找不到的指南应该指示您做这样的事情(由于您在问题中概述的次要版本问题之间明显不兼容)。此规则的唯一例外是,如果您要构建一个自包含的本机安装的应用程序,它不依赖于预安装的JRE(您不是这样)。