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

标签 java javafx javafx-11 fatjar

我认为不言而喻,我应该能够使用 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 应用程序并将其提供给想要实际使用它的人,而除了如何使用该应用程序本身之外什么都不知道?

最佳答案

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

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

非模块化应用

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 命令的使用,就分发而言,因为它创建了自定义您可以发送给用户的图像。它不是一个 fat jar 子,但它允许您向您的用户发送一个 zip 文件,只需解压缩并像这样运行:

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

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

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

hellofx

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

其他选项

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

自定义 Java+JavaFX 图片

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

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

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

jpackage

jpackage 工具还没有,但是可以提前访问:http://jdk.java.net/jpackage/ ,即使用 Java 13-internal。退出 documentation解释了生成自定义镜像或安装程序所需的命令行选项。

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

构建工具

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

关于java - JDK11/JavaFX : How do I make a fat jar without build/depdency management?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300695/

相关文章:

java - 如何防止android应用程序因后台线程异常而崩溃?

drag-and-drop - JavaFX 拖放阶段

maven - 使用来自 maven 的 JavaFX11 构建可执行 JAR

java - 在 Java 中生成随机整数列表(以类似 Scala 的方式)

java - Struts 1.3 的替代品有哪些

Java:检查泛型是否为 int

java - JavaFX 中的 FileChooser 给出 NullPointerException

java - 如何将监听器添加到分隔符位置?

JavaFX 模块化应用程序,未找到 java.lang.module.FindException : Module javafx. 控件(Java 11、Intellij)