我认为不言而喻,我应该能够使用 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/