【问题标题】:gradle wrapper reports x86-64 architecture instead of arm-v8 architecture on Mac m1gradle wrapper 在 Mac m1 上报告 x86-64 架构而不是 arm-v8 架构
【发布时间】:2022-08-24 15:58:15
【问题描述】:

您好,在 Mac m1 上工作时,Gradle 包装器任务报告与 gradle 相比不正确的架构:

这是./gradlew clean 的结果:

operating system \'Mac OS X\'
architecture \'x86-64\'
osx
x86_64
x86_64

这是gradle clean 的结果:

operating system \'Mac OS X\'
architecture \'arm-v8\'
osx
aarch_64
aarch64

有人对此有解释吗。

附加信息:gradle --version 的输出

------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------

Build time:   2022-03-31 15:25:29 UTC
Revision:     540473b8118064efcc264694cbcaa4b677f61041

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          18.0.1 (Homebrew 18.0.1+0)
OS:           Mac OS X 12.2.1 aarch64

这是我的 build.gradle 显示架构的内容:

println org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem;
println org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentArchitecture;
println osdetector.os
println osdetector.arch
println System.getProperty(\"os.arch\")

我使用gradle wrapper 从我的 Mac m1 生成了 Gradle 包装器。

  • 您的机器上是否安装了多个 JVM;一个 x86 和一个原生 ARM 的?也许一个命令正在获取一个 JVM,而另一个命令正在获取另一个。 ./gradlew --version 打印什么?
  • 确实是这样,我安装了多个 JVM,默认一个是运行 Rosetta 的 x86-64。是否将其更改为 homebrew 安装的 arm-v8 版本,它解决了我的问题。非常感谢杰斯珀
  • @Antonin 请写下、发布并接受您自己问题的答案。这样做会将页面标记为已解决,并且更容易帮助后代。将this link 包含在维基百科中。
  • 好吧@BasilBourque 无论如何都想这样做,还没有找到时间。

标签: java gradle apple-m1 openjdk-17


【解决方案1】:

感谢@Jesper 的评论,这是该问题的解决方案。

TL;博士

列出您系统上的 JVM,并验证您是否拥有至少一个 (arm64) JVM。

➜  ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    18.0.1.1 (arm64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/you/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home
    18.0.1.1 (x86_64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/you/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1-1/Contents/Home
    18.0.1 (arm64) "Homebrew" - "OpenJDK 18.0.1" /opt/homebrew/Cellar/openjdk/18.0.1/libexec/openjdk.jdk/Contents/Home
/Users/you/Library/Java/JavaVirtualMachines/openjdk-18.0.1.1/Contents/Home

Setup your JAVA_HOME environment variable to an arm64 JVM

export JAVA_HOME=`/usr/libexec/java_home -a arm64`

我的情况发生了什么:

这是由系统上安装的多个 JVM 引起的。一些 JVM 为 arm64 编译并在本机运行,而另一些 JVM 为 x86_64 编译并在"translator" (rosetta) 中运行。

  • 由 intelliJ IDEA 安装的 Oracle x86_64 JDK。
  • Homebrew 安装的 OpenJDK arm64 作为 gradle 的依赖项。

没有遵循 openJDK 的“警告”:

==> Caveats
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

所以自制软件安装的 gradle 使用的是自制软件安装的 JVM。但是 gradlew 脚本使用的是默认系统 JVM(Oracle x86_64 JVM)。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多