macOS下Maven与java -version返回Java版本不一致问题咨询
macOS下
/usr/bin/java未设置JAVA_HOME时的JDK查找逻辑 - 首先要明确:
/usr/bin/java不是某个JDK自带的真实可执行文件,而是macOS系统内置的Java虚拟机框架提供的调度 wrapper 程序,它的核心调度规则如下:- 优先读取当前shell环境的
JAVA_HOME变量,如果变量存在且指向合法的JDK路径,直接调用该路径下的Java程序 - 若未检测到
JAVA_HOME变量,会扫描系统注册路径/Library/Java/JavaVirtualMachines/下的所有JDK安装包,默认选择优先级最高(通常是版本最高)的合法JDK作为调用目标
- 优先读取当前shell环境的
- 你场景里默认调用Java11的原因:
你通过Homebrew安装的OpenJDK16默认不会自动注册到/Library/Java/JavaVirtualMachines/系统路径下,系统扫描该目录时只能识别到你之前安装的AdoptOpenJDK11,因此默认调用该版本。 - 验证方法:
执行系统自带的/usr/libexec/java_home -V命令,可以列出所有被系统识别的JDK列表,你会看到只有Java11出现在列表中,这就是默认调用它的原因。
如果要让系统默认识别Homebrew安装的OpenJDK16,可以手动执行软链命令完成注册:sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
内容的提问来源于stack exchange,提问作者sr-01-01
相关产品推荐
相关产品推荐

