JDK11/JavaFX: 没有build/depdency管理的胖罐子如何制作?

JDK11/JavaFX: How do I make a fat jar without build/depdency management?

我认为不言而喻,我应该能够使用 Oracle 自己的 JDK 和 JavaFX(来自 gluonhq)来构建用户可以使用的可分发 jar 文件。

经过详尽的搜索、大量阅读(过去几个月 24 小时或更长时间),最后 Google 搜索查询:

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

我已经走到了尽头。到底为什么要做这么多工作?我如何构建一个 JavaFX 应用程序并将其提供给想要实际使用它的人,而除了如何使用应用程序本身之外一无所知?

and 已经回答了几次这个问题。构建工具使事情比在命令行上更容易,不仅仅是因为依赖管理。

由于您专门询问有关命令行的信息,因此此处已经记录了完整的指令集:https://openjfx.io/openjfx-docs/#modular

非模块化应用程序

Non-Modular from CLI 部分涵盖了来自命令行的 JavaFX 非模块化项目,并为您提供了创建旧经典 fat jar 的整套说明,其中所有依赖项,包括JavaFX 的,都捆绑在一起。

有一条警告您不要使用此过程的注释:

Warning: This is a discouraged tedious error-prone manual process that should be avoided by using the Maven's shade plugin or the Gradle's jar task, in case jlink is not applicable.

拿到fat jar后(可以跨平台),就可以分发了,你的用户需要安装Java和运行:

java -jar myFat.jar 

模块化应用程序

Modular from CLI 部分涵盖了来自命令行的 JavaFX 模块化项目,并参考了 jlink 命令的使用,在分发方面,因为它创建了自定义图像您可以发送给您的用户。它不是一个胖罐子,但它允许您向您的用户发送一个 zip 文件,只需要解压并且 运行 就像:

hellofx/bin/java -m hellofx/hellofx.HelloFX

在这种情况下,您的用户甚至不需要安装 Java。

通过一些额外的工作,您还可以创建一个批次,这样您就可以 运行:

hellofx

但是,如果您仍想使用模块化应用程序制作 fat jar,您仍然可以从非模块化应用程序中应用完全相同的指令。在这种情况下,您可能必须删除 module-info.java 文件,因为此时它没有任何意义。

其他选项

您还有更多选择来分发您的应用程序。

自定义 Java+JavaFX 图像

同一文档中的另一个选项,自定义 JDK+JavaFX 图像部分,解释了如何创建您自己的 "JDK",其中包括 JavaFX。然后你将像往常一样在 Java 8 中生成你的 jar,你将能够 运行 它与:

/path/to/custom/java -jar myFat.jar

请注意,已经有一些 JDK 捆绑了 JavaFX 的发行版,例如 one

jpackage

jpackage 工具尚不存在,但可以提前访问:http://jdk.java.net/jpackage/, that is using Java 13-internal. The exiting documentation 解释了生成自定义映像或安装程序所需的命令行选项。

请注意,您仍然可以使用 JavaFX 11 或 12。

构建工具

最后,您仍然可以决定使用构建工具(Maven 或 Gradle),这将在很多方面真正帮助您。请参阅上面的任何链接问题。