为什么当我使用 Intellij IDEA 为 javafx 应用程序生成工件时,除了 .jar 之外,它还会生成 .html 和 .jnlp 文件?,这两个文件是应用程序工作所必需的,如果不是,是否有设置我可以更改以便不再创建这些吗?
当前的 Idea JavaFX Artifact 选项卡(截至 2025 年初)已过时,并且不适用于现代 Java 发行版。 它是为早期的 JavaFX 版本构建的,例如最初嵌入 Oracle JDK 8 中的版本,该版本依赖于 JavaFX ant 任务和一个名为
javafxpackager
的工具,该工具已不再可用。
当您尝试将 Idea JavaFX Artifact 与现代 Java/JavaFX 发行版(例如 23.x)一起使用时,它将输出:
Java FX Packager: Can't build artifact - fx:deploy is not available in this JDK
JavaFXPackager 的替代品是 jpackage 工具。 据我所知,目前Idea不提供使用jpackage工具的直接工件支持。 该工具可以直接从命令行或 shell 脚本使用,也可以通过 maven 和 gradle 的构建工具插件使用。 jpackage 工具不会为打包的工件生成 HTML 和 JNLP 代码,因为这种部署依赖于 Java Webstart 技术,而该技术不再是 OpenJDK 项目的一部分。
各种 JavaFX 执行模式所需的文件
它生成一个 .html 和一个 .jnlp 文件?,这两个文件是应用程序工作所必需的吗
部署所需的文件取决于应用程序的执行模式。
.html
、.jnlp
和 .jar
文件。.html
、.jnlp
和 .jar
文件。.jnlp
和 .jar
文件。java -jar MyApp.jar
,或通过双击应用程序 JAR 文件来启动它。”),那么您只需要 .jar
文件。.jnlp
、.html
或 .jar
文件,因为运行应用程序所需的所有内容都将打包到本机安装包中(例如.rpm
、.msi
、.deb
、 .dmg
)您将分发。建议的方法
由于您将使用“独立程序”形式进行分发,因此您只需要
.jar
文件进行分发,并且可以忽略 Java 打包工具创建的其他文件。
虽然您可以通过选择
Build | Build Artifacts | Edit... | + | JAR | From modules with dependencies...
让 Idea 将您的应用程序打包为 JAR,但我不建议这样做,因为您还需要在清单中设置主类,并且会丢失使用打包的文件的一些功能Idea 的“JavaFX 应用程序”打包类型,例如用于启动应用程序的 Java 运行时是否满足运行 JavaFX 应用程序的最低要求的内置检测以及透明网络代理支持。
因此,只需使用您已经设置的 Idea 工件打包配置,无需更改。 忽略
.html
文件和 .jnlp
文件输出。 只需将 .jar
文件分发给您的用户,并附上有关如何通过 java -jar MyApp.jar
或在计算机上安装 Java 运行时后双击 .jar
启动该文件的说明。
便携式构建建议
如果只有您自己开发项目,并且您不熟悉 maven 或 gradle 等外部构建工具,那么使用 Idea IDE 内置的工件打包功能(可能)比学习和使用外部工具更简单。
如果您的项目可能由其他开发人员处理,或者要在 Jenkins 等持续集成系统中生成和测试构建,我不建议依赖 IDE 特定的构建系统,例如 Idea 中的工件打包器。 相反,请使用外部构建工具,例如 Maven 或 gradle。 有一个用于 JavaFX 构建的 maven 插件 和 gradle 插件。