macOS 是自带了 JRE 的,但实际上却没那么好用,今天就来聊下我遇到的问题以及解决方案.
我也记不清楚之前本机的 Java 环境是否是配置好了,昨天更新了 macOS 之后,今天想装个 Jenkins 玩下,结果在运行 Jenkins 的时候发现 No Java runtime present, requesting install.
查看 Java 环境
如果看到需要安装的话,择说明没有 Java 环境,需要配置 JRE 了。
安装 JRE
JRE : Jave Runtime Environment,即运行 Java程序的环境。
- 点击 系统偏好设置 里的 Java 图标
如果没有这个图标或者点击后没有出来 Java 控制面板
那就需要去 oracle 下载安装 JRE http://www.oracle.com/technetwork/java/javase/downloads/jre9-downloads-3848532.html;下载 dmg 包就行,需要选中 Accept License Agreement !
下载完成,双击一路安装即可!
本以为这样就行了,其实不行,安装完成后 Java 控制面板 到是有了!
查找问题
既然 Java 控制面板 里显示了 java 环境了,那么肯定是环境已经有了,只不过命令行里使用的时候没找到而已,这好办,查一查 java 的真实身份吧:
1
2
3
4
which java
/usr/bin/java
ls -al /usr/bin/java
lrwxr-xr-x 1 root wheel 74 11 28 23:06 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
这说明了 java 命令搜索路径是 /usr/bin/java 并且这只是个替身,原身是 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java !!!
如下图:
原身 JavaVM.framework:
这个 JavaVM.framework 不是我们安装的,好像是苹果自带的!!再回过头检查了下,发现 Desktop 这里的路径跟苹果自带的 JRE 路径不一样,这个路径是安装过 Oracle JRE 的路径!!
目录结构如下图:
因此解决方案就是将苹果自带的 JRE 修改为 Oracle 的 JRE,原本想着将这个替身直接改为我们安装的这个JRE里的java,可是很遗憾,对于高版本的 macOS 而言 /usr/bin 目录没有修改权限,想拥有权限有些麻烦,这里不再介绍。所以换个思路去解决。
我们知道命令行输入的命令查找顺序是按照设定的 PATH 路径查找的,因此可以从 PATH 入手,先来看下完整的 PATH 搜索路径:
1
2
bogon:~ xuqianlong$ echo $PATH
/Users/xuqianlong/.rvm/gems/ruby-2.2.6/bin:/Users/xuqianlong/.rvm/gems/ruby-2.2.6@global/bin:/Users/xuqianlong/.rvm/rubies/ruby-2.2.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/xuqianlong/.rvm/bin:/usr/local/ssl
由于是按顺序查找的,所以只要在 /usr/bin 之前搜索到就不会使用默认的苹果指定的 JRE 了,经过仔细查看发现 /usr/local/bin 在 /usr/bin 之前搜索,所以我们可以在 /usr/local/bin 里建个 Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java 的替身!
解决问题
上面讨论了解决方案,下面实施下:
1
ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/local/bin
重启终端再次查看环境:
1
2
3
4
java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
这次对啦,正是我们刚装的 9.0.4 版本!
为什么苹果自带的不行呢,我还不能确定!