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

问题描述 投票:2回答:1

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

java javafx javafx-11 fatjar
1个回答
6
投票

这已经为MavenGradle回答了几次。构建工具比在命令行上更容易,而不仅仅是因为依赖管理。

由于您具体询问命令行,因此已经记录了一整套指令: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),这将在很多方面为您提供帮助。请参阅上面的任何相关问题。

© www.soinside.com 2019 - 2024. All rights reserved.