今天重裝了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