今天重装了OS X,作为一枚java猿,完事之后的第一件事情就是安装JDK咯,以前安装JDK真没注意过,以前都是直接去Oracle下载dmg镜像,然后一路next啪啪啪就安装好了,然后网上搜索个如何配置JAVA_HOME的教程然后就收工了。从来没有多想,真是够无脑的!
然而今天不一样啊,突然想不起Java安装在哪个文件夹里面了,卧槽这是大事啊,文件夹都不晓得,你配个鬼的JAVA_HOME
啊。于是我在终端敲了敲java
,神奇的事情出现了,有反应!而且java -version
也可以,试一下javac
呢,还是可以!我就懵了!我啥都没干就可以了?OS X这么智能?自己给我添加了JAVA_HOME
?于是断然 echo $JAVA_HOME
,结果是啥都没有,更蒙蔽了。卧槽你是在耍我么?
仔细想想,你敲java
要有反应,那么java必须在$PATH
里面,想到这里就好办了,所以咋办呢,去$PATH
找java啊,但是那么几个文件夹,找个锤子哦。
于是我不服气了,所以我
MacBook-Pro:~ jsy$ which java
/usr/bin/java
然后我
cd /usr/bin
ls -l java
lrwxr-xr-x 1 root wheel 74 7 26 13:38 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
卧槽666,原来这个java是个假货,他只是链接到
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
这个目录而已,实不相瞒,这里面的Current文件夹
也是个假货,它暗度陈仓到A这个文件夹了
MacBook-Pro:Versions jsy$ ls -l Current
lrwxr-xr-x 1 root wheel 1 7 26 13:36 Current -> A
于是顺藤摸瓜,进入A
,这下子收获大了去了,因为,卧槽看不懂啊,但是主要的就是Commands
目录下,有着全套的java
命令,我是无法理解的,Google之后发现,原来这是在JDK安装的时候生成的
,这下子就理解了,都是OS X在作妖蛾子,最后的最后,真正的JDK安装目录在哪里呢?真相只有一个,那就是在
/Library/Java/JavaVirtualMachines/jdk1.8.0_141.jdk
里面,原始天尊就他一个,其余的在
/System/Library/Frameworks/JavaVM.framework/Versions
是安装的时候生成的副本, /usr/bin里面的java不过是个链接指向/System/Library/Frameworks/JavaVM.framework/
而已,就这这么逐层理解,就清楚了。
那么问题来了,你球事没有搞这些有卵用啊?弄个山路十八弯干啥,还嫌哥不够忙啊?但是Google告诉了我,这些都是为了切换JDK版本方便
,比如你机子里面有1.6,1.7,1.8的jdk,更巧的是你丫的还有32位的和64位的,这不是搞事情么,于是为了广大开发者切换jdk的方便,就这么设计的七弯八绕,然后百川归海,交由/usr/libexcu
下面的java_home
来管理,这个java_home
是个应用程序,用来返回某个特定版本的安装目录,也就是之前我们说的原始天尊的目录,咋用呢,比如我安装的是1.8的jdk,要设置环境变量JAVA_HOME
,就得拿到1.8版本的jdk的安装目录,怎么拿?看下面
MacBook-Pro:A jsy$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_141.jdk/Contents/Home
清晰的返回了我1.8版本的JDK的安装目录,于是我可以设置JAVA_HOME了,具体怎么设我就不写了,很多人都写过了。
参考资料
java在哪里
java_home