背景
最近使用Bazel在MacOS上编译运行Java代码,遇到Bazel一直识别不到本地的JDK导致编译报错的问题,经过这几天的查资料研究,终于发现解决办法。
解决方案
查看Java Home值
终端运行:
$ /usr/libexec/java_home -V
输出:
Matching Java Virtual Machines (1):
1.8.0_311 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
无论安装过多少个JDK版本,只要最后一行的输出类似这种:/Library/Java/JavaVirtualMachines/jdkxxxxxxxxx/xxx/xxx
证明设置的java home是正常的,
如果最后一行输出是/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
,说明java_home识别到的路径不正常,可以尝试用下面方法解决。
删除识别的错误目录
$ sudo rm -rf /Library/Internet Plug-Ins/JavaAppletPlugin.plugin
重新启动系统
注意一定要重启系统,不然java_home命令返回的值不会更新。
重启完成后终端运行:
$ /usr/libexec/java_home
如果输出的是/Library/Java/JavaVirtualMachines
下的目录,说明问题已解决。
补充
通过解决此问题,了解到了Mac下最规范的设置JAVA_HOME环境变量的方式,贴在此处。
设置JAVA_HOME环境变量
$ vim ~/.bash_profile
添加export JAVA_HOME=$(/usr/libexec/java_home)
$ source ~/.bash_profile
(注:.bash_profile
视终端类型可能需要改为.zshrc
或.bashrc
等。)