update-alternatives是Ubuntu系統中專門維護系統命令鏈接符的工具,通過它可以很方便的設置系統默認使用哪個命令、哪個軟件版本,比如,我們在系統中同時安裝了open jdk和sun jdk兩個版本,而我們又希望系統默認使用的是sun jdk,那怎么辦呢?通過update-alternatives就可以很方便的實現了。
sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.6.0_27/bin/java 1062
其中1062 為alternative更改后的優先級,新更改的優先級需要大于當前的,通過update-alternatives --display java 可以查看。
現在介紹下 update-alternatives 命令中的幾個主要選項,diplay、install、remove、config;
1、display選項的功能就是查看一個命令鏈接組的所有信息,包括鏈接的模式(自動還是手動)、鏈接PRiority值、所有可 用的鏈接命令等等。使用語法:update-alternatives --display name ,其中name為命令鏈接名稱,如java,執行命令: update-alternatives --display java 將會出現類似下面的結果
java - auto mode
link currently points to /opt/java/jdk1.6.0_27/bin/java
/opt/java/jdk1.6.0_27/bin/java - priority 1062
/usr/lib/jvm/java-6-openjdk/jre/bin/java - priority 1061
slave java.1.gz: /usr/lib/jvm/java-6-openjdk/jre/man/man1/java.1.gz
Current 'best' version is '/opt/java/jdk1.6.0_27/bin/java'.
2、install選項的功能就是增加一組新的系統命令鏈接符了,使用語法為:update-alternatives --install link name path priority [--slave link name path]... 其中link為系統中功能相同軟件的公共鏈接目錄,比如/usr/bin/java(需絕對目錄); name為命令鏈接符名稱,如java; path為你所要使用新命令、新軟件的所在目錄; priority為優先級,當命令鏈接已存在時,需高于當前值,因為當alternative為自動模式時,系統默認啟用priority高的鏈接; --slave為從alternative。
alternative有兩種模式:auto和manual,默認都為auto模式,因為大多數情況下update-alternatives命令都被postinst (configure) or prerm (install)調用的,如果將其更改成手動的話安裝腳本將不會更新它了。
3、remove選項的功能是刪除一個alternative及相關從alternative,使用語法為:update-alternatives --remove name path,其中name與path與install中的一致,如果所刪除的鏈接組中還有其他鏈接的話,系統將會自動從其他中選擇一個priority高的鏈接作為默認為鏈接。
4、config選項功能為在現有的命令鏈接選擇一個作為系統默認的,使用語法為:update-alternatives --config name,如執行:sudo update-alternatives --config java,將會有類似以下信息:
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /opt/java/jdk1.6.0_27/bin/java 1062 auto mode
1 /opt/java/jdk1.6.0_27/bin/java 1062 manual mode
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode
Press enter to keep the current choice[*], or type selection number:
若是想將manual改回自動模式的話,執行命令: update-alternatives --auto name即可,如
update-alternatives --config java
The instructions on the AOSP page are out of date as of 9/13/2013; the apt repository they recommend has no package called sun-java6-jdk. The following manual recipe should install the proper JDK and replace the OpenJDK installed as a dependency of maven above.
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java6-installer
If you cannot install JDK 1.6 try below alternative steps.
Alternative(Install JDK 1.6):## download java jdk from http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u38-oth-JPR## install java$ chmod +x jdk-6u38-linux-x64.bin$ sudo ./jdk-6u38-linux-x64.bin$ sudo mv jdk1.6.0_38 /usr/lib/jvm/ $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_38/bin/java 1$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_38/bin/javac 1$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_38/bin/javaws 1 ## when prompted select the 6.0_38 versions of each$ sudo update-alternatives --config java$ sudo update-alternatives --config javac$ sudo update-alternatives --config javaws $ cd /usr/lib/jvm/$ sudo ln -s ./jdk1.6.0_38/ java-6-sun ##Setting JAVA_HOME/Path for Maven and jarsigner##For all users:$ sudo nano /etc/profile.d/javaenv.sh----- Contents -----export JAVA_HOME=/usr/lib/jvm/java-6-sunexport PATH=$PATH:$JAVA_HOME/bin----- End of contents -----$ sudo chmod a+x /etc/profile.d/javaenv.sh
$ sudo apt-get install openjdk-7-jdk
to list currently installed jdk versions:
$ sudo update-java-alternatives -l
java-1.7.0-openjdk-amd64 1051 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-oracle 1 /usr/lib/jvm/java-6-oracle
select oracle JDK 6 as default (Lollipop would set JAVA_HOME to use OpenJDK7 when doing "lunch")
$ sudo update-java-alternatives java-6-oracle
create a symbolic link for JDK6
$ sudo ln -s /usr/lib/jvm/java-6-oracle /usr/lib/jvm/java-6-sun
Reboot required for it to propagate to all users.
新聞熱點
疑難解答