1. 程式人生 > >Mac 下的 Java 版本管理工具 jenv

Mac 下的 Java 版本管理工具 jenv

我們經常會在 Mac 中安裝不同的 JDK 版本。預設 OSX 自帶的版本是 JDK 1.6,但後來我們可能還會安裝 1.7。最近又升級到了 1.8.0.101。

而且不同的 JDK 版本下載的地方都不太一樣,Java 6 在Apple下載,7 和 8 要從 Oracle 下載。

所以你的系統中可能同時存在 3 個以上版:1.6、1.7、1.8。如果你的系統和筆者一樣是 Yosemite,那麼你會在 /System/Library/Java/JavaVirtualMachines/ 目錄下找到系統內建的 Java 版本:

$ ls /System/Library/Java/JavaVirtualMachines
/ 1.6.0.jdk

在 /Library/Java/JavaVirtualMachines/ 資料夾下找到後兩個版本:

$ ls /Library/Java/JavaVirtualMachines/
jdk1.7.0_71.jdk     jdk1.8.0_101.jdk

如果你不是通過系統偏好中的 Java 控制面板進行升級,那麼你需要手動配置 JAVA_HOME,以指定不同的Java版本。否則,當你安裝完新版本 JDK 後,你會發現 java -version 命令顯示的仍然還是升級之前的版本。而手動配置 JAVA_HOME,還是比較麻煩的。

這樣,就輪到本文的主角出場了。

正其所宣稱的,jenv 是一個專門用於配置 JAVA_HOME 環境變數工具。你可以用它來管理 Mac 上的 Java 版本。

1. 安裝 jenv

命令 $ brew install jenv,安裝完成後你需要配置一下 jenv:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

這將在 ~/.bash_profile 檔案中追加一個 export 命令和 eval 命令。前者追加 jenv 的路徑到環境變數 PATH 中,後者執行 jenv init -命令。這樣每開啟一個 bash 終端窗就可以呼叫 jenv 命令,並且預設執行一次 jenv init - 命令了。

2. 檢視 java 版本

可以用 jenv -versions 命令檢視一下當前 java 版本:

$ jenv versions
* system (set by /Users/kmyhy/.jenv/version)

可以看到 jenv 只列出了系統內建的 Java 版本(system),因為其它兩個版本雖然安裝了,但需要我們手動新增到 jenv 中,這樣 jenv 才能管理它們。

3. 新增新的 java 版本

使用 jenv add 新增 JDK 1.7:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/
oracle64-1.7.0.71 added
1.7.0.71 added
1.7 added

還記得你的 JDK 1.7 安裝目錄嗎,它是 /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk 目錄。

再新增 JDK 1.8:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
oracle64-1.8.0.101 added
1.8.0.101 added
1.8 added

記得把 1.8 的路徑換一下,換成你自己的路徑。

4. 刪除 java 版本

你會發現新增新版本時,每個版本都會一次性自動加入 3 個不同版本,比如新增 1.8 的時候報告:

oracle64-1.8.0.101 added
1.8.0.101 added
1.8 added

我們沒有必要保留這麼多版本,其實它們都指向同一個 JDK,我們可以把 1.8 以外的兩個版本刪除:

$ jenv remove oracle64-1.8.0.101
JDK oracle64-1.8.0.101 removed
$ jenv versions
* system (set by /Users/kmyhy/.jenv/version)
  1.8
  1.8.0.101
$ jenv remove 1.8.0.101
...

這樣就清爽多了。

5. 指定 Java 版本

這要用 jenv local 命令:

$ jenv local 1.8
$ jenv versions
  system
* 1.8 (set by /Users/kmyhy/.java-version)
  1.8.0.101

這樣當前版本就變成 1.8 了,你可以看一下:

$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

你要是想檢視當前版本在硬碟上的哪個位置,可以用 jenv which java:

$ jenv which java
/Users/kmyhy/.jenv/versions/1.8/bin/java

這當然不是真實的路徑,而是一個硬連結。你可以找到 /Users/kmyhy/.jenv/versions/ 目錄,發現所有的 java 版本都被列在了這裡,這些硬連結(相當於 windows 的快捷方式)都指向了對應的 java 安裝目錄。
你還可以指定一個全域性的版本:

$ jenv global 1.8

這樣,預設的 java 版本就是 1.8 了。如果你想在某個專案中使用 1.6 版本,可以在專案資料夾下新建一個.java-version 檔案,將檔案內容編輯為 1.6.0.65 儲存。這樣,你進入這個資料夾時 jenv 會自動使用 1.6 作為當前版本(即 local 版本)。