gradle wrapper 在 Mac m1 上报告 x86-64 架构而不是 arm-v8 架构

gradle wrapper reports x86-64 architecture instead of arm-v8 architecture on Mac m1

你好,当从 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 包装器。

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

TL;DR

列出您系统上的 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=`export /usr/libexec/java_home -a arm64`

我的情况发生了什么:

这是由于系统上安装了多个 JVM 造成的。一些 JVM 是为 arm64 和 运行 本机编译的,而其他一些是在 "translator" (rosetta).

中为 x86_64 和 运行 编译的
  • Oracle x86_64 JDK 通过 intelliJ IDEA 安装。
  • 打开JDK Homebrew 作为 gradle.
  • 的依赖项安装的 arm64

没有遵循打开的“注意事项”JDK :

==> 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)。