我认为不用说我应该能够使用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。
非模块化应用程序
Non-Modular from CLI
部分从命令行介绍了JavaFX非模块化项目,并为您提供了一整套指令来创建一个旧的经典胖jar,其中所有依赖项(包括JavaFX)都捆绑在一起。
有一条提示警告您不要使用此程序:
警告:如果jlink不适用,应该避免使用Maven的shade插件或Gradle的jar任务,这是一个令人沮丧的单调乏味的容易出错的手动过程。
在获得胖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一样。
JPackage上
jpackage
工具还没有,但有一个早期访问:http://jdk.java.net/jpackage/,即使用Java 13内部。现有的documentation解释了生成自定义映像或安装程序所需的命令行选项。
请注意,您仍然可以使用JavaFX 11或12。
构建工具
最后,您仍然可以决定使用构建工具(Maven或Gradle),这将在很多方面为您提供帮助。请参阅上面的任何相关问题。