部署 JavaFX 应用程序、创建 JAR 和自包含应用程序以及本机安装程序的最佳方式是啥

Posted

技术标签:

【中文标题】部署 JavaFX 应用程序、创建 JAR 和自包含应用程序以及本机安装程序的最佳方式是啥【英文标题】:What is the best way to deploy JavaFX application, create JAR and self-contained applications and native installers部署 JavaFX 应用程序、创建 JAR 和自包含应用程序以及本机安装程序的最佳方式是什么 【发布时间】:2015-07-20 15:57:25 【问题描述】:

我正在使用 IntelliJ IDEA,并且我的 JavaFX 应用程序已准备好进行部署。 问题是当我生成 JAR 文件时,它不会运行,当我在命令行中运行它时,我得到一个异常 FXMLLoadException,尽管该项目在我的 IDE 中运行良好。

Ant任务以错误结束,经过15分钟的构建,我真的不明白到底是什么问题。

所以我的问题是什么是正确部署 JavaFX 应用程序的正确步骤,欢迎任何教程或指南。

【问题讨论】:

你能把你的蚂蚁日志的最后几行贴出来吗? FXMLLoadException 听起来您的 .fxml 文件未包含在您的 .jar 中。您可能想尝试解压 jar (unzip jarfile.jar) 并搜索您的 .fxml 文件。无论如何,我正在使用带有Travis CI 的 gradle,它允许部署到许多不同的部署提供程序。 【参考方案1】:

Java 应用程序可以以多种方式打包。请通过Java Packaging Overview 查找有关它的所有信息。其中一个包装是self-contained Java application

有不同的方法来创建这些包:

使用 JDK 附带的 javapackager 工具 JavaFX Ant 任务 用于 Maven 项目的 JavaFX Maven 插件

自包含应用程序是应用程序打包方式之一,并且是特定于平台的。捆绑包包含:

应用程序包 JRE 的私有副本

可用捆绑包的列表可以是found here。

让我们看看我们可以使用的各种工具以及如何使用它们:

JavaPackager 工具

JavaPackager Tool 是最基本的工具,可帮助您编译、打包、签名和部署 Java(FX) 应用程序,而无需编写任何额外的脚本。 javapackager.jar文件位于JDK安装的bin目录下。

可以使用的命令列表是available here。

JavaFX Ant 任务

JavaFX Ant Tasks 只需为您的项目创建一个build.xml 文件即可帮助您打包您的应用程序。

关于如何在您的项目中使用 ant 脚本的一组示例可以是found here。

可以使用的命令列表是available here。

JavaFX Maven 插件

JavaFX Maven Plugin 利用将 java 应用程序打包到 maven 平台的用法。您可以通过将插件添加到项目中来使用它来打包基于 maven 的 java 应用程序。

这个插件恕我直言,如果easiest 使用了三个。它是一个写得很好、易于理解的工具,并且有大量的文档。

JavaFX Gradle 插件

JavaFX Gradle Plugin也来自maven插件的作者。它具有 maven 插件的所有功能,但对于 Gradle :)

进一步阅读:

Native packaging for JavaFX JavaFX packaging tools update

【讨论】:

谢谢,你能更新“JavaFX Maven 插件”吗?链接坏了。我以前从未使用过 maven,也没有得到任何关于新手的信息(比如我)。 :-/ JavaFX Maven 插件非常适合我,而且非常易于使用。只需将插件添加到 pom 和一个命令,例如"mvn jfx:native" 请注意,javapackager 工具已弃用并由jpackage 取代,请参阅:JEP 392: Packaging Tool。 此处的 JavaFX Maven 插件链接已过时且损坏,已替换为:the gihub hosted openjfx javafx-maven-plugin, 该主题最全面且目前最新的资源(虽然不是真正全面)是the openfjx.io documentation。【参考方案2】:

如果您使用 Maven,另一种非常聪明的方法是使用 maven-shade-plugin (link)。它构建了一个包含所有依赖项的大胖 jar,您可以在其中直接执行,而无需做任何进一步的事情。您可以将其与javafx-maven-plugin 结合使用。我也尝试了不同的方法并玩了很长时间,这个解决方案是唯一真正有效的解决方案。此外,它很容易设置。

这是您必须添加到 pom.xml 中的内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>your.package.name.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.zenjava</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>8.8.3</version>
            <configuration>
                <mainClass>your.package.name.Main</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

mainClass 中更改您的包名称以获取 shade 和 javaFx 插件,您就完成了。现在您可以像往常一样使用mvn package 构建您的应用程序。

【讨论】:

此处引用的 zenjava JavaFX Maven 插件已过时且损坏,已替换为:the gihub hosted openjfx javafx-maven-plugin, 对于最近的 JavaFX 应用程序(例如 JavaFX 11+),不建议使用 maven shade 创建 jar。 JavaFX 11+ 被设计为作为模块化发行版的一部分运行,它并不是真正设计为与阴影 jar 兼容。请参阅openjfx documentation,了解一些用于生成运行时映像的替代选项。【参考方案3】:

Oracle 在其网站上为JavaFX 2 和JavaFX 8 提供了有关打包的详尽指南。

如果您需要针对特定​​问题的帮助,请发布您遇到的错误的代码和堆栈跟踪。

【讨论】:

以上是关于部署 JavaFX 应用程序、创建 JAR 和自包含应用程序以及本机安装程序的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

部署JavaFx应用程序jar

如何在单个.JAR中签署和部署JavaFX应用程序?

分发/部署 JavaFX 应用程序

ProGuard 破坏 JavaFX 应用程序

带有 StackPane 和自定义控件的 Javafx TabPane

使用 maven 部署 javafx hsqldb 项目