Apple Silicon 上的 JavaFx / UnsatisfiedLinkError:无法加载库:libprism_es2.dylib

Leo*_*tis 3 javafx apple-silicon

我正在尝试在带有 Apple Silicon 芯片的 MacOS 系统上使用 Maven、gradle、sbt 或类似工具构建 JavaFx 项目,但遇到了如下错误:

UnsatisfiedLinkError: Can't load library: libprism_es2.dylib
Run Code Online (Sandbox Code Playgroud)

该怎么办?

Leo*_*tis 8

JavaFx 从版本 17-ea+8 开始支持 Apple Silicon (aarch64) 架构

但是您需要使用操作系统和体系结构的分类器来限定依赖性。

对于 Maven,依赖关系应该如下所示:

<!-- ... -->
<dependency>
  <groupId>org.openjfx</groupId>
  <artifactId>javafx-controls</artifactId>
  <version>18.0.2</version>
  <classifier>mac-aarch64</classifier>
</dependency>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

在 gradle 中,JavaFx 插件版本 0.0.11 或更高版本将附加正确的分类器:

plugins {
    // ...
    id( "org.openjfx.javafxplugin" ) version "0.0.13"
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在 sbt 中,您可以将以下内容添加到您的build.sbt文件中:

lazy val myproject = ( project in file( "." ) )
  .settings(
    // ...
    libraryDependencies ++= Seq(
      //...
      "org.openjfx" % "javafx-controls" % "18.0.2" classifier "mac-aarch64",
      //...
    )
    // ...
  )
Run Code Online (Sandbox Code Playgroud)

使用这些构建工具中的每一个,您都可以执行复杂的操作,以便您的构建定义动态地解析要应用的分类器,无论您构建的平台是什么。但这留给读者作为练习。

请注意,虽然System.getProperty( "os.name" )不能解析为org.openjfx在其分类器中用于识别目标平台的确切文本,但可以解析为Apple Silicon 计算机上的System.getProperty( "os.arch" )文本。aarch64