java - gradle 包装器报告 Mac m1 上的 x86-64 架构而不是 arm-v8 架构

标签 java gradle apple-m1 openjdk-17

您好,当使用 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 包装器从我的 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=`/usr/libexec/java_home -a arm64`

我的案例发生了什么:

这是由于系统上安装了多个 JVM 造成的。一些 JVM 是针对 arm64 编译的并在 native 运行,而另一些 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)。

关于java - gradle 包装器报告 Mac m1 上的 x86-64 架构而不是 arm-v8 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72215813/

相关文章:

java - 将 Maven 库中的 android.support.v4.util.ArraySet 替换为 androidx.collection.ArraySet

electron - 为 M1 mac 签名 Electron 构建会导致渲染器崩溃

docker - 如何在 Docker 内的 M1 (ARM) 上运行 ElasticSearch v6

java - hibernate 中的一级缓存存储在哪里?在内存还是硬盘?

java - Action Bar、Navigation drawer 和 fragment backstack 管理

Java/hibernate/JPA : cannot persist with compound key -> transient object

multithreading - 如何利用 Apple Silicon 上的高性能内核

Java:同步排序多个ArrayLists或单个映射的ArrayList

spring-boot - 无法在带有注解处理器配置的Gradle 5中使用Maven BOM

android - FloatingActionButton 和 Snackbar 的导入语句出错