Apple M1 - macosx-arm64 尚不可用的 Maven Java 依赖项

Posted

技术标签:

【中文标题】Apple M1 - macosx-arm64 尚不可用的 Maven Java 依赖项【英文标题】:Apple M1 - Maven Java dependency that is not yet available for macosx-arm64 【发布时间】:2021-06-18 23:14:23 【问题描述】:

我正在尝试让一个 Java/Maven 项目在 Apple M1 上运行,该项目具有 M1 芯片尚不可用的依赖项。就我而言,这是 nd4j,但它可能是任何其他依赖项。

<dependency>
   <groupId>org.nd4j</groupId>
   <artifactId>nd4j-native</artifactId>
   <version>1.0.0-beta7</version>
</dependency>

我在这个项目中使用 IntelliJ。

我正在寻找一种方法来指定某种“兼容模式”,告诉 maven/IntelliJ 获取 X86 芯片的依赖项并使用 Rosetta 执行 Java、测试、maven 等。如果这不可能,还有什么办法可以解决这个问题?

【问题讨论】:

出于兴趣,您是否有已经在 M1 上本地运行的 JDK(或者仍在使用 Rosetta)? 我运行 Azul JDK。我通过自制软件安装了 Maven,我认为它包含一个支持 M1 的实验性 OpenJDK。我的其他 Java 项目与 Azul JDK 配合得很好,因为我没有这些其他项目的 nod4j 依赖项。 您是否尝试过使用“普通”的 OpenJDK?那仍然是 x86,通过 Rosetta 运行,并且大概告诉 Maven 它的架构也是 x86。 我只是在下面马里奥的回答之后尝试了这个。这确实有效。 【参考方案1】:

您可以在您的机器上同时安装基于 x86_64 和 arm64 的 JDK,并根据需要在它们之间切换。 SDKMAN 之类的工具!可以帮助你:How to install x86 and Arm JDKs on the Mac M1

如果你的 maven 和 IntelliJ 使用默认的 JDK,当你切换 JDK 时,它们会自动在 x86_64 和 Arm64 架构之间切换。

【讨论】:

非常感谢您的回答。这确实有效。一个小的缺点是 nd4j 似乎不能很好地与 Rosetta 一起工作,但我想我们对此无能为力。该项目可以构建并且可以运行,因此这已经是一个巨大的改进。测试运行良好。但是当使用更大的神经网络时,nd4j 会使用大量 RAM,并最终引发 OOM 异常。【参考方案2】:

如果你在 Apple 上使用 IDEA for Java,不要使用 IDEA M1 版本,使用 Intel 版本。然后maven将使用macosx-x86 jar。只是改变JDK对我没有帮助。

【讨论】:

还需要切换x86_64 JDKs,因为maven检测os.arch使用JDKs

以上是关于Apple M1 - macosx-arm64 尚不可用的 Maven Java 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Docker(Apple Silicon/M1 Preview)MySQL“清单列表条目中没有与 linux/arm64/v8 匹配的清单”

模块“Alamofire”是为不兼容的目标 arm64 - apple- ios 10 创建的

苹果 m1 芯片下运行 flink 程序使用 rocksdb 状态后端兼容性问题

苹果 m1 芯片下运行 flink 程序使用 rocksdb 状态后端兼容性问题

注册期间未在 Macbook Pro 2020 M1 上检测到适用于 iOS 的 Apple Configurator

如何在 Apple M1 芯片上导入 Pandas