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

evi*_*red 8 java eclipse ant javafx jar

我有一个应用程序,在从Eclipse导出为runnable jar并将其"打包所需的库到生成的JAR"后,可以使用"java -jar blah.jar"运行.

我添加了一些JavaFX代码来弹出Web浏览器.现在似乎不可能制作一个可以在小型Java版本中运行的可运行jar.当我将它导出为可运行的jar时,它会复制到我的次要版本特有的jfxrt.jar中.如果我使用"java -jar blah.jar"为完全匹配的java版本(jdk1.7.0_17)运行此jar,那么它工作正常,但如果我使用一个稍微更新(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> 
Run Code Online (Sandbox Code Playgroud)

并且似乎只能创建我不想要的"本地捆绑".我不想让用户在以前能够运行darn jar时安装rpm或deb.

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

jew*_*sea 11

JavaFX包装替代品

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

由于您使用的是Eclipse,因此建议您使用备选(1),e(fx)clipse包装.

忠告

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