乐趣区

IDEA通过Maven打包JavaFX工程OpenJFX11

1 概述

最近研究 JFX,写出来了但是打包不了,这。。。尴尬。。。
IDEA 的文档说只支持 Java8 打成 jar 包:

尝试过直接使用 Maven 插件的 package,不行,也尝试过 Build Artifacts,也不行,各种奇奇怪怪的问题。包括下图中的

Error....fx:deploy is not available in this JDK

不过幸好文档末尾提到可以使用一些第三方工具:

因此记录一下使用 IDEA 打包 JFX11 工程的过程。

2 环境

  • IDEA 2020.1
  • OpenJDK 11
  • OpenJFX 11

只需安装 IDEA 与 JDK 即可,JFX 可以在 pom.xml 中引入。

3 创建工程

选择 Maven,选择 Create from archetype,然后 Add Archetype 并填上 GroupId:

org.openjfx

与 ArtifactId:

javafx-maven-archetypes

还有 version:

0.0.1


下一步自定义,这里为了方便就直接默认了。

然后修改 archetypeArtifactId 为

javafx-archetype-fxml


完成即可。

4 检查文件

Maven 同步完后,检查项目目录下的 module-info.java 与 pom.xml,其中 pom.xml 不应该是下图这样的:

而应该是这样的,包含了 javafx.controls 与 javafx.fxml 依赖,还有 javafx-maven-plugin 插件:

同时 src 下的 module-info.java 应该长这样:

module-info.java 包含了所需要的 javafx.controls 与 javafx.fxml 这两个模块。

5 修改插件依赖

默认的 javafx-maven-plugin 版本应该为 0.0.1:

整个去掉,修改为:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.4</version>
    <configuration>
        <stripDebug>true</stripDebug>
        <compress>2</compress>
        <noHeaderFiles>true</noHeaderFiles>
        <noManPages>true</noManPages>
        <launcher>launcher</launcher>
        <jlinkImageName>output</jlinkImageName>
        <jlinkZipName>outputzip</jlinkZipName>
        <mainClass>org.openjfx.App</mainClass>
    </configuration>
</plugin>

其中 launcher 为可执行文件名,jlinkImageName 为 Image 输出目录名,jlinkZipName 为 zip 文件名,mainClass 为主类。

6 运行并打包

从右侧栏的 Maven 通过 javafx 插件运行并打包:

7 测试

根据修改插件时的目录,进入对应的 target 下的子目录直接运行即可:

 项目目录 /target/output/bin/launcher

注意这个是跨平台的,只需具备 JDK11 环境即可,发布只需要把 zip 文件发布。

8 demo

  • github
  • 码云

9 扩展阅读

这篇文章是 OpenJFX 的文档,主要介绍了:

  • 通过三种方式(JFX+Maven+Gradle)运行 Hello World
  • 构建运行镜像(CLI+Maven+Gradle+ 自定义镜像)
  • IntelliJ/NetBeans/Eclipse 通过三种方式(IDE 自身 +Maven+Gradle)运行与打包 JFX

链接戳这里。

退出移动版