MacOS未设置JAVA_HOME可使用javac和java及多JDK版本管理问题
问题解答
1. 为什么没配置JAVA_HOME也能正常使用Java命令?
MacOS 系统内置了Java命令包装器,安装官方JDK时会自动将命令关联到系统级路径/usr/bin/java,该程序会自动扫描/Library/Java/JavaVirtualMachines/目录下的所有已安装JDK,默认调用优先级最高的版本,因此单JDK环境下不需要额外配置也能正常使用java、javac命令。
2. 多版本JDK场景是否需要配置JAVA_HOME?
需要。
- 绝大多数Java生态工具(Maven、Tomcat、Gradle、各类IDE等)都会优先读取
JAVA_HOME环境变量来确定使用的Java版本,不配置的话工具会默认调用系统全局JDK,很容易出现项目与工具依赖的Java版本不兼容问题。 - 多版本共存时如果不手动指定
JAVA_HOME,系统会默认使用安装的最新版本JDK,无法实现版本按需切换,容易出现运行异常。
3. 多版本JDK切换方案(无需额外安装管理工具)
3.1 安装多版本JDK
可以通过官网下载dmg包安装,也可以通过brew安装对应版本的OpenJDK,所有安装完成的JDK都会默认存放在/Library/Java/JavaVirtualMachines/目录下。
如果brew安装的OpenJDK没有被系统识别,可以执行软链接命令:
# 以JDK11为例,其他版本替换对应版本号即可 sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
3.2 查看当前所有已安装JDK
执行以下命令可以列出所有系统识别的JDK版本和对应安装路径:
/usr/libexec/java_home -V
3.3 配置快速切换别名
编辑你的~/.bash_profile文件,新增以下内容:
# 配置JAVA_HOME到PATH优先级最高,优先使用指定版本 # 注意替换你原配置文件中已有的 export PATH="$PATH:$MAVEN_HOME/bin" 行,避免重复配置 export PATH="$JAVA_HOME/bin:$PATH:$MAVEN_HOME/bin" # 配置各版本JDK切换别名,版本号和你实际安装的保持一致即可 alias jdk8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)' alias jdk11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)' alias jdk14='export JAVA_HOME=$(/usr/libexec/java_home -v 14)' alias jdk15='export JAVA_HOME=$(/usr/libexec/java_home -v 15)' # 可以指定一个默认用的JDK版本,比如默认用JDK8 jdk8
修改完成后执行source ~/.bash_profile让配置生效。
3.4 使用方式
需要切换版本时,直接在终端执行对应别名即可:
# 切换到JDK11 jdk11 # 查看当前版本验证 java -version
这种切换是终端会话级别的,不同终端窗口可以用不同的JDK版本,互不影响。
内容的提问来源于stack exchange,提问作者alalalala
相关产品推荐
相关产品推荐

