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

原文 标签 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应用程序并将其提供给想要实际使用它的人,而又不知道如何使用应用程序本身呢?

最佳答案

已经为MavenGradle回答了几次。生成工具比通过命令行使事情变得更容易,不仅是因为依赖管理。

由于您是专门询问命令行的,因此这里已经有完整的说明文档:https://openjfx.io/openjfx-docs/#modular

非模块化应用程序
Non-Modular from CLI小节从命令行介绍了JavaFX非模块化项目,并为您提供了创建旧的经典Fat jar的全部指令集,其中所有依赖项(包括JavaFX依赖项)都捆绑在一起。

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

警告:这是一个令人沮丧的,容易出错且容易出错的手动过程,如果jlink不适用,应使用Maven的shade插件或Gradle的jar任务避免该过程。

获得胖子罐(可以是跨平台)后,可以分发它,并且您的用户将需要安装Java并运行:

java -jar myFat.jar 

模块化应用程序
Modular from CLI一节从命令行涵盖JavaFX模块化项目,并在分发方面引用了jlink命令的用法,因为它创建了可以发送给用户的自定义图像。它不是一个胖子,但它允许您向用户发送一个zip,而该zip只需解压缩即可运行:
hellofx/bin/java -m hellofx/hellofx.HelloFX

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

并通过一些额外的工作,您还可以创建一个批处理,因此您可以运行:
hellofx

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

其他选择

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

自定义Java + JavaFX图像

同一文档的“自定义JDK + JavaFX图像”部分中介绍了另一种方法,该方法说明了如何创建包含JavaFX的“JDK”。然后,您将像通常在Java 8中那样生成jar,并可以使用以下命令运行它:
/path/to/custom/java -jar myFat.jar

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

jpackage
jpackage工具尚不存在,但是可以进行早期访问:http://jdk.java.net/jpackage/,它使用Java 13-internal。退出的documentation解释了生成定制映像或安装程序所需的命令行选项。

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

构建工具

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

相关文章:

java - maven-shade-plugin ConnectException:连接被拒绝以获取java.sun.com DTD(由XMLAppendingTransformer处理以构建Apache CXF)

java - 在Mac OSX上从Java启动AppleScript脚本

java - WordNet(JWI MIT):单词的反义词?

c# - 将C#系统转换为跨平台应用程序的最佳编程语言?

spring - JavaFX桌面应用程序-与Web服务的套接字通信

java - Java 12和JavaFX 12-创建可运行的jar和自定义JRE

java - 找不到javafx.controls JavaFX 11 / JDK 11.0.1

java - JavaFX Linechart点操作

java - JavaFX使用SceneBuilder将节点添加到ScrollPane

java - 带弹簧启动的Java Fx Splash屏幕