linux下如何使用自己安裝的SunJDK替換默認的OpenJDK


在linux系統中,由於涉及到版權問題,在大部分linux系統的發行版本中,默認都安裝了OpenJDK,並且OpenJDK的java命令也已經加入到環境變量中了。

在剛裝好的linux系統中,運行java -version,輸出如下(根據JDK版本不同,輸出的版本可能不同):

java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

 

但在進行java開發時,我們大多是需要使用Sun(准確的說應該是Oracle)的JDK,所以我們會去Oracle官網下載相應版本的JDK進行安裝。

如何在linux上安裝,在此不在贅述。

在linux上安裝完JDK后,我們會在~/.bash_profile 把安裝的java加入到環境變量中。原以為就萬事大吉了,在運行java程序時會使用自己安裝的JDK。

 

如果你是這么想的就大錯特錯了,在文章開頭講的,由於linux系統的發行版中默認安裝的時OpenJDK,盡管我們把安裝的SunJDK的java命令也加入到環境變量中,但是我們運行

java -version,輸出確還是和之前一樣:

java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

 

這要這么破!!!

 

一、查找原因

不急,先運行

whereis java,輸出如下:
java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java /opt/java/bin/java

在幾個地方有java命令,其中/opt/java/bin/java是我自己安裝的SunJDK的java命令所在的目錄,而/usr/bin/java是系統中默認安裝的java命令所在的目錄。

原因就在這,

我們執行

ls -la /usr/bin/java,輸入如下:

lrwxrwxrwx 1 root root 22 May 14 16:53 /usr/bin/java -> /etc/alternatives/java

一看這是一個軟連接,我們cd到/etc/alternatives目錄下看個究竟,

然后執行 ls -la,輸入比較多,而且很多軟鏈,其中有一個

lrwxrwxrwx  1 root root   46 May 14 18:22 java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

到此,應該明白了,java命令其實指向的是OpenJDK中的java命令,所以才會出現我們把自己安裝的SunJDK的java命令配置到環境變量中后,依然不起作用。

所以我們要做的就是需要把java的軟鏈指向我們自己安裝的SunJDK的java命令,也即/opt/java/bin/java。

 

二、使用安裝的JDK替代系統默認的OpenJDK

linux中提供了update-alternatives命令,update-alternatives是linux系統(大部分linux系統都支持此命令)中專門維護系統命令鏈接符的工具,通過它可以很方便的設置系統默認使用哪個命令、哪個軟件版本,而所有的這些就構成了備選方案系統(alternatives system)。

很多時候我們會將擁有相同或相似功能的不同應用程序安裝在同一個操作系統上,例如同一個操作系統上的不同文本編輯器。這給了這個系統的用戶在編輯文本時有了更多的選擇,如果用戶願意他們可以自由選擇任意一個來使用。

其實update-alternatives命令的功能很好理解,舉個例子:在Window系統中,如果我們安裝多個瀏覽器,比如有火狐、有IE、有360、有Chrome等,當我們從某個鏈接進去打開網頁時,可能會問你使用哪個瀏覽器,當你選擇某個瀏覽器時,此瀏覽器會問你是否把它作為默認瀏覽器,如果你選擇了是,那下次點開某個鏈接時,就直接使用默認瀏覽器打開了!

 

現在我們在系統中同時安裝了open jdk和sun jdk兩個版本,(由於linux發行版本中默認使用OpenJDK的java命令 )而我們又希望系統默認使用的是sun jdk,那怎么辦呢?通過update-alternatives就可以很方便的實現了。

首先運行以下命令查看java當前的默認配置

update-alternatives --display java,輸出如下(后面有省略):
java - status is manual.
 link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java - priority 170131
 slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/orbd
......

可以從輸出中看到系統中java默認使用的OpenJDK,其中數字170131表示優先級。

 

2.1 下面進入正式配置階段

1. 把自己安裝的SunJDK加入到備選系統中

運行命令(注意命令最后的數字表示優先級,其中170130 為SunJDK的alternative的優先級)

 update-alternatives  --install /usr/bin/java java /opt/java/bin/java 170130

 

2. 選擇自己安裝的SunJDK作為首選java命令

運行命令

update-alternatives --config java,輸出如下

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /opt/java/bin/java

Enter to keep the current selection[+], or type selection number:

config命令是交互式的命令,可以根據提示進行選擇,此處我們選擇2,即使用安裝的SunJDK的java命令,然后按回車鍵!

至此,配置完成了!

 

說明:在配置步驟1中,我們指定SunJDK的優先級是170130(比當前優先級170131低),所以需要進行步驟二進行手動選擇;如果我們指定的優先級比當前優先級170131高,則步驟二可以省略,系統自動會選擇優先級高的作為默認alternative!

 

關於update-alternatives命令更詳細的說明,請參照

1.http://www.cnblogs.com/pengdonglin137/p/3462492.html

2. http://www.mamicode.com/info-detail-1144825.html

3. http://persevere.iteye.com/blog/1479524
參考:

http://www.cnblogs.com/imyalost/p/8745137.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM