因为在 Apple M1、M2 ...(Apple Silicon)上,可以同时安装适用于arm(又名arm64)或Intel CPU(又名amd64)的JDK,并且它会正常工作,有问题要告诉(to其他 mac 上的同事)如何检查
如何检查mac上安装的JDK是针对arm64还是amd64?
System.getProperty("os.arch")
)例如
mvn -v
曾经足以讲述所有细节。
mvn -v
Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: /opt/homebrew/Cellar/maven/3.9.1/libexec
Java version: 17.0.6, vendor: Amazon.com Inc., runtime: /Users/user/Library/Java/JavaVirtualMachines/corretto-17.0.6-1/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.4", arch: "aarch64", family: "mac"
JDK java/javac 也没有给出线索。
javac -version
javac 17.0.6
java -version
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Corretto-17.0.6.10.1 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.6.10.1 (build 17.0.6+10-LTS, mixed mode, sharing)
我们还通过脚本安装了JDK,JDK安装在docker容器中。 应该有一些通用的方法来检查。
如果您只需要手动检查,则可以使用
file
实用程序,对于可执行文件,该实用程序应该告诉您二进制文件是针对什么架构构建的。
因此,假设您想了解路径上的
javac
,您可以运行
file $(which javac)
或者,更一般地说
file /path/to/your/binary
并读取其输出。
一个例子:
$ file $JAVA_HOME/bin/javac
/Users/user/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/bin/javac:Mach-O 64 位可执行文件 x86_64
$ file $JAVA_OTHER_HOME/bin/javac
/Users/user/Library/Java/JavaVirtualMachines/corretto-1.8.0_362-1/Contents/Home/bin/javac:Mach-O 64 位可执行文件arm64
在 macOS 14 及更高版本上,最简单的方法是使用命令:
/usr/libexec/java_home -V
答案会是这样的
Matching Java Virtual Machines (1):
21.0.1 (arm64) "Eclipse Adoptium" - "OpenJDK 21.0.1" /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
所以:
21.0.1
-> 版本
arm64
-> 架构 (Apple Silicon)
Eclipse Adoptium
-> 分布