一個關於linux與java的學習筆記,當然還有作者自己的心情紀錄。

2011年10月24日星期一

JDK7 on non-RPM based Linux

JDK 7出來已經有一段時日了,官方網頁也貼心的提供了rpm的套件可以直接安裝,只可惜沒有deb可以下載。雖然如此,我們還是可以省略掉一些手法來同時使用系統提供的jdk6以及網路下載的jdk7--利用update-alternatives工具來達成。但是為了方便作說明,還是先安裝系統套件庫所提供的jdk6吧:

aptitude install sun-java6-jdk

接著下載適合自己的版本:x86或是x86_64

我先查看自己的java版本以及他安裝在何處:

ls -l `which java`
發現原來是連結到/etc/alternatives裡:
lrwxrwxrwx 1 root root 22 2011-10-24 21:39 /usr/bin/java -> /etc/alternatives/java
利用update-alternatives來幫助我們作版本控制,使我們不用手動設定變數等複雜設定,也統一了管理介面。
ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 36 2011-10-24 21:39 /etc/alternatives/java -> /usr/lib/jvm/java-6-sun/jre/bin/java
所以結果揭曉:/usr/bin/java是來自於/etc/alternatives的一個軟連結,而這個軟連結源自於真正的java位置。所以我們看看他的狀態:
update-alternatives --display java
輸出結果可能會是:
java - auto mode
  link currently points to /usr/lib/jvm/java-6-sun/jre/bin/java
/usr/lib/jvm/java-6-sun/jre/bin/java - priority 63
  slave java.1.gz: /usr/lib/jvm/java-6-sun/jre/man/man1/java.1.gz
Current 'best' version is '/usr/lib/jvm/java-6-sun/jre/bin/java'.

所以我們也可以如法泡製,把下載來的jdk7放在/usr/lib/jvm底下:

wget -c http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u2-linux-i586.tar.gz
sudo tar zxvf jdk-7u2-linux-i586.tar.gz -C /usr/lib/jvm/
但此時update-alternatives的cache裡並不會自己發現有jdk的存在,這是安裝一個deb檔的postinst程序才會執行的部份。我們自己試著新增一個,語法如下:
update-alternatives --install <link> <name> <path> <priority>

通常priority大於1000比較有可能是首選。那麼我們利用下面的script完成update吧:
update-alternatives --install /usr/bin/appletviewer appletviewer /usr/lib/jvm/jdk1.7.0_02/bin/appletviewer 2000
update-alternatives --install /usr/bin/apt apt /usr/lib/jvm/jdk1.7.0_02/bin/apt 2000
update-alternatives --install /usr/bin/ControlPanel ControlPanel /usr/lib/jvm/jdk1.7.0_02/bin/ControlPanel 2000
update-alternatives --install /usr/bin/extcheck extcheck /usr/lib/jvm/jdk1.7.0_02/bin/extcheck 2000
update-alternatives --install /usr/bin/idlj idlj /usr/lib/jvm/jdk1.7.0_02/bin/idlj 2000
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_02/bin/jar 2000
update-alternatives --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk1.7.0_02/bin/jarsigner 2000
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_02/bin/java 2000
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_02/bin/javac 2000
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_02/bin/javadoc 2000
update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.7.0_02/bin/javah 2000
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_02/bin/javap 2000
update-alternatives --install /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/jdk1.7.0_02/bin/java-rmi.cgi 2000
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_02/bin/javaws 2000
update-alternatives --install /usr/bin/jconsole jconsole /usr/lib/jvm/jdk1.7.0_02/bin/jconsole 2000
update-alternatives --install /usr/bin/jcontrol jcontrol /usr/lib/jvm/jdk1.7.0_02/bin/jcontrol 2000
update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/jdk1.7.0_02/bin/jdb 2000
update-alternatives --install /usr/bin/jhat jhat /usr/lib/jvm/jdk1.7.0_02/bin/jhat 2000
update-alternatives --install /usr/bin/jinfo jinfo /usr/lib/jvm/jdk1.7.0_02/bin/jinfo 2000
update-alternatives --install /usr/bin/jmap jmap /usr/lib/jvm/jdk1.7.0_02/bin/jmap 2000
update-alternatives --install /usr/bin/jps jps /usr/lib/jvm/jdk1.7.0_02/bin/jps 2000
update-alternatives --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk1.7.0_02/bin/jrunscript 2000
update-alternatives --install /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/jdk1.7.0_02/bin/jsadebugd 2000
update-alternatives --install /usr/bin/jstack jstack /usr/lib/jvm/jdk1.7.0_02/bin/jstack 2000
update-alternatives --install /usr/bin/jstat jstat /usr/lib/jvm/jdk1.7.0_02/bin/jstat 2000
update-alternatives --install /usr/bin/jstatd jstatd /usr/lib/jvm/jdk1.7.0_02/bin/jstatd 2000
update-alternatives --install /usr/bin/jvisualvm jvisualvm /usr/lib/jvm/jdk1.7.0_02/bin/jvisualvm 2000
update-alternatives --install /usr/bin/keytool keytool /usr/lib/jvm/jdk1.7.0_02/bin/keytool 2000
update-alternatives --install /usr/bin/native2ascii native2ascii /usr/lib/jvm/jdk1.7.0_02/bin/native2ascii 2000
update-alternatives --install /usr/bin/orbd orbd /usr/lib/jvm/jdk1.7.0_02/bin/orbd 2000
update-alternatives --install /usr/bin/pack200 pack200 /usr/lib/jvm/jdk1.7.0_02/bin/pack200 2000
update-alternatives --install /usr/bin/policytool policytool /usr/lib/jvm/jdk1.7.0_02/bin/policytool 2000
update-alternatives --install /usr/bin/rmic rmic /usr/lib/jvm/jdk1.7.0_02/bin/rmic 2000
update-alternatives --install /usr/bin/rmid rmid /usr/lib/jvm/jdk1.7.0_02/bin/rmid 2000
update-alternatives --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk1.7.0_02/bin/rmiregistry 2000
update-alternatives --install /usr/bin/schemagen schemagen /usr/lib/jvm/jdk1.7.0_02/bin/schemagen 2000
update-alternatives --install /usr/bin/serialver serialver /usr/lib/jvm/jdk1.7.0_02/bin/serialver 2000
update-alternatives --install /usr/bin/servertool servertool /usr/lib/jvm/jdk1.7.0_02/bin/servertool 2000
update-alternatives --install /usr/bin/tnameserv tnameserv /usr/lib/jvm/jdk1.7.0_02/bin/tnameserv 2000
update-alternatives --install /usr/bin/unpack200 unpack200 /usr/lib/jvm/jdk1.7.0_02/bin/unpack200 2000
update-alternatives --install /usr/bin/wsgen wsgen /usr/lib/jvm/jdk1.7.0_02/bin/wsgen 2000
update-alternatives --install /usr/bin/wsimport wsimport /usr/lib/jvm/jdk1.7.0_02/bin/wsimport 2000
update-alternatives --install /usr/bin/xjc xjc /usr/lib/jvm/jdk1.7.0_02/bin/xjc 2000

所以到此為止雖然我們都沒有透過dpkg或是aptitude來安裝jdk7,但是一樣可以作到版本控制,非常方便。

啟動Java plugins:
你可以點我有Java嗎?來測試Java plugin是否有安裝上去。在我的LinuxMint 11 amd64的版本裡,我即使安裝了sun-java6-plugin,無論是我的firefox 或是chrome都無法顯示成功啟動java plugin。
試試看這樣行不行得通:

cd /usr/lib/mozilla/plugins
ln -s /usr/lib/jvm/jdk1.7.0_02/jre/lib/amd64/libnpjp2.so .
如果是rpm-based linux,可以這麼做:
cd /usr/lib/mozilla/plugins
ln -s /usr/java/default/jre/lib/amd64/libnpjp2.so .

參考文章:
man update-alternatives

Share

0 意見: