JavaFX Maven 平台特定构建:mac aarm64 限定符

ker*_*000 3 javafx maven

我正在使用 Maven 构建我的 JavaFX 应用程序,如下所示:

pom.xml中定义的依赖项:

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

Maven 构建命令:

mvn package -Djavafx.platform=mac
Run Code Online (Sandbox Code Playgroud)

这设置了跨平台构建时的平台限定符。以下 Maven 分类器可用:

win,mac,linux
Run Code Online (Sandbox Code Playgroud)

(参见https://openjfx.io/openjfx-docs/ “跨平台”)

现在,如果我使用 mac 分类器进行构建,然后尝试使用 aarch64 JRE 执行,则这是行不通的。显然,mac 分类器指定了不适合 aarch64 JRE 的 mac x64 架构。

我可以以某种方式指定 mac 的 aarch64 依赖版本吗?

Jos*_*eda 5

这个问题没有回答类似的问题,但它现在有点过时了,因为从 JavaFX 17 开始添加了 macOS AArch64 支持。

在 JavaFX 17 之前,javafx.pom 父 pom包含以下 Maven 配置文件:

  • linuxjavafx.platform=linux
  • macosxjavafx.platform=mac
  • windowsjavafx.platform=win
  • 以及自定义配置javafx.platform.custom文件javafx.platform=${javafx.platform}

随着新架构的支持,并从 JavaFX 17 开始,父 pom包含以下 Maven 配置文件:

  • linux-x86_64javafx.platform=linuxjavafx.platform=linux-monocle
  • linux-aarch64javafx.platform=linux-aarch64javafx.platform=linux-aarch64-monocle
  • linux-arm32javafx.platform=linux-arm32-monocle
  • macosx-x86_64javafx.platform=macjavafx.platform=mac-monocle
  • macosx-aarch64javafx.platform=mac-aarch64javafx.platform=mac-aarch64-monocle
  • windows-x86_64javafx.platform=winjavafx.platform=win-monocle
  • windows-x86javafx.platform=win-x86javafx.platform=win-x86-monocle
  • 以及自定义配置javafx.platform.custom文件javafx.platform=${javafx.platform}

因此,如果您想要进行仅包含 macOS AArch64 依赖项的跨平台构建,您只需要:

mvn package -Djavafx.platform=mac-aarch64
Run Code Online (Sandbox Code Playgroud)

当然,这仅适用于 Gluon 发布到 Maven Center 的 JavaFX 工件,不适用于其他发行版(JavaFX SDK 或捆绑在 Java SDK 中)。

注意:这些配置文件有一个替代方案,如果您在 pom 中monocle包含一个属性,则可以激活该替代方案:javafx.monocle

<javafx.monocle>true</javafx.monocle>
Run Code Online (Sandbox Code Playgroud)

这允许使用带或不带monocle的 JavaFX 工件(嵌入式系统 JavaFX 的 Glass 窗口组件的实现),就像从https://gluonhq.com/products/javafx/下载 SDK 一样。例如,如果您在没有 Windows 管理器的情况下在 Raspberry Pi 的命令行上运行,这非常有用。