java - JDK 11 / JavaFX:如何在没有构建/依赖管理的情况下制作胖子?

我想不用说,我应该能够使用oracle自己的jdk和javafx(来自gluonhq)来构建一个用户可以直接使用的可分发jar文件。
经过详尽的搜索、大量阅读(过去几个月24小时或更长时间)以及最终的谷歌搜索查询:

how to make a fat jar -maven -gradle -scala -eclipse -ant -docker -hadoop -netbeans -jerkar -phy -mozni -yogurt -pizza - throwing -python -bacon

我已经到了路的尽头了。为什么这么多工作?我如何构建一个javafx应用程序,并将它提供给那些想实际使用它的人,而不知道除了如何使用应用程序本身之外的任何东西?

最佳答案

这个问题已经为MavenGradle回答过几次了。构建工具使事情比在命令行上做要容易得多,这不仅仅是因为依赖关系管理。
因为您特别询问了命令行,所以这里已经有一整套关于命令行的说明:https://openjfx.io/openjfx-docs/#modular
非模块化应用程序
Non-Modular from CLI一节从命令行介绍了javafx非模块化项目,并为您提供了创建旧的经典fat jar的整套指令,其中所有依赖项(包括javafx依赖项)都捆绑在一起。
有一条注释警告您不要使用此过程:
警告:如果jlink不适用,这是一个不受欢迎的、乏味的、容易出错的手动过程,应该通过使用maven的shade插件或gradle的jar任务来避免。
在您获得fat jar(它可以是跨平台的)之后,您可以分发它,您的用户将需要安装java并运行:

java -jar myFat.jar 

模块化应用程序
Modular from CLI部分介绍了命令行中的javafx模块化项目,并在分发方面提到了jlink命令的使用,因为它创建了一个可以发送给用户的自定义图像。它不是一个胖罐子,但它允许您向用户发送一个zip,只需解压缩并运行如下:
hellofx/bin/java -m hellofx/hellofx.HelloFX

在这种情况下,您的用户甚至不需要安装Java。
通过一些额外的工作,您还可以创建一个批处理,这样您就可以运行:
hellofx

但是,如果您仍然想用模块化应用程序做一个胖罐子,那么您仍然可以应用来自非模块化应用程序的完全相同的指令。在这种情况下,您可能需要删除module-info.java文件,因为此时它并不真正有意义。
其他选择
您还有几个选项可以分发应用程序。
自定义Java+JavaFX映像
同一文档中的另一个选项,custom jdk+javafx image部分,解释了如何创建包含javafx的自己的“jdk”。然后您将像往常一样在java 8中生成jar,并可以使用以下命令运行它:
/path/to/custom/java -jar myFat.jar

注意,已经有一些jdk发行版捆绑了javafx,比如one
J包装
jpackage工具尚不存在,但有一个早期访问:http://jdk.java.net/jpackage/,即使用java 13内部。退出的documentation解释了生成自定义映像或安装程序所需的命令行选项。
注意,您仍然可以使用javafx 11或12。
生成工具
最后,您仍然可以决定使用构建工具(maven或gradle),这将在许多方面真正帮助您。请参阅以上任何相关问题。

本文翻译自 https://stackoverflow.com/questions/55300695/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java javafx javafx-11 fatjar


相关文章:

java - Maven和Eclipse启动JavaFX 11应用程序的行为不同

java - Java- Main方法在类中找不到

java - Spring数据REST findBy嵌套实体

java - 如何在Java中正确实现通用接口

java - 使用线程发出数据库请求

java - IntelliJ IDEA 2018.2,openjdk 11和openjfx 11(没有Maven,不是模块化项目):找不到模块javafx.controls [重复]

java - 将JavaFX与Intellij IDEA结合使用

java - SAP Jar无法在Eclipse中识别

java - 如何在JavaFX中将StringProperty绑定到ObjectProperty <Integer>?

java - JavaFX FileChooser新文件