01 2月 2012

Install Sun/Oracle JDK in Ubuntu 11.10

在Oracle買下Sun之後,Ubuntu上要安裝sun/oracle的JDK是愈來愈不容易...
還是做個筆記囉

安裝Sun JDK6

sudo add-apt-repository ppa:flexiondotorg/java 
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin sun-java6-fonts

安裝Oracle JDK7
這部份主要是參考Intalling Java 7 on Ubuntu Natty (11.04)

  1. 請至Oracle http://www.oracle.com/technetwork/java/javase/downloads/index.html Download最新的檔案,要注意配合作業系統。下列的例子以x64為主。
  2. 解壓縮後移到/usr/lib/jvm裡,並重新命名為java-7-oracle-1.7.0_02,再修改owner為root,最後建一個名為java-7-oracle的link,這樣以後若有新的版本,就只要修改link即可。
      tar -xzf jdk-7u2-linux-x64.tar.gz
      sudo mv jdk1.7.0_02 /usr/lib/jvm/java-7-oracle-1.7.0_02
      cd /usr/lib/jvm
      sudo chown -R root:root java-7-oracle-1.7.0_02
      sudo ln -s java-7-oracle-1.7.0_02 java-7-oracle
    
  3. 以root的身份執行下列的指令,若不想一直下sudo,就先執行sudo -sH來切換身份吧
    update-alternatives --quiet --install /usr/lib/xulrunner-addons/plugins/libjavaplugin.so xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 63
    update-alternatives --quiet --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 63
    update-alternatives --quiet --install /usr/bin/appletviewer appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer 63 --slave /usr/share/man/man1/appletviewer.1 appletviewer.1 /usr/lib/jvm/java-7-oracle/man/man1/appletviewer.1
    update-alternatives --quiet --install /usr/bin/apt apt /usr/lib/jvm/java-7-oracle/bin/apt 63 --slave /usr/share/man/man1/apt.1 apt.1 /usr/lib/jvm/java-7-oracle/man/man1/apt.1
    update-alternatives --quiet --install /usr/bin/extcheck extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck 63 --slave /usr/share/man/man1/extcheck.1 extcheck.1 /usr/lib/jvm/java-7-oracle/man/man1/extcheck.1
    update-alternatives --quiet --install /usr/bin/idlj idlj /usr/lib/jvm/java-7-oracle/bin/idlj 63 --slave /usr/share/man/man1/idlj.1 idlj.1 /usr/lib/jvm/java-7-oracle/man/man1/idlj.1
    update-alternatives --quiet --install /usr/bin/jar jar /usr/lib/jvm/java-7-oracle/bin/jar 63 --slave /usr/share/man/man1/jar.1 jar.1 /usr/lib/jvm/java-7-oracle/man/man1/jar.1
    update-alternatives --quiet --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner 63 --slave /usr/share/man/man1/jarsigner.1 jarsigner.1 /usr/lib/jvm/java-7-oracle/man/man1/jarsigner.1
    update-alternatives --quiet --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 63 --slave /usr/share/man/man1/javac.1 javac.1 /usr/lib/jvm/java-7-oracle/man/man1/javac.1
    update-alternatives --quiet --install /usr/bin/javadoc javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc 63 --slave /usr/share/man/man1/javadoc.1 javadoc.1 /usr/lib/jvm/java-7-oracle/man/man1/javadoc.1
    update-alternatives --quiet --install /usr/bin/javah javah /usr/lib/jvm/java-7-oracle/bin/javah 63 --slave /usr/share/man/man1/javah.1 javah.1 /usr/lib/jvm/java-7-oracle/man/man1/javah.1
    update-alternatives --quiet --install /usr/bin/javap javap /usr/lib/jvm/java-7-oracle/bin/javap 63 --slave /usr/share/man/man1/javap.1 javap.1 /usr/lib/jvm/java-7-oracle/man/man1/javap.1
    update-alternatives --quiet --install /usr/bin/jconsole jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole 63 --slave /usr/share/man/man1/jconsole.1 jconsole.1 /usr/lib/jvm/java-7-oracle/man/man1/jconsole.1
    update-alternatives --quiet --install /usr/bin/jdb jdb /usr/lib/jvm/java-7-oracle/bin/jdb 63 --slave /usr/share/man/man1/jdb.1 jdb.1 /usr/lib/jvm/java-7-oracle/man/man1/jdb.1
    update-alternatives --quiet --install /usr/bin/jhat jhat /usr/lib/jvm/java-7-oracle/bin/jhat 63 --slave /usr/share/man/man1/jhat.1 jhat.1 /usr/lib/jvm/java-7-oracle/man/man1/jhat.1
    update-alternatives --quiet --install /usr/bin/jinfo jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo 63 --slave /usr/share/man/man1/jinfo.1 jinfo.1 /usr/lib/jvm/java-7-oracle/man/man1/jinfo.1
    update-alternatives --quiet --install /usr/bin/jmap jmap /usr/lib/jvm/java-7-oracle/bin/jmap 63 --slave /usr/share/man/man1/jmap.1 jmap.1 /usr/lib/jvm/java-7-oracle/man/man1/jmap.1
    update-alternatives --quiet --install /usr/bin/jps jps /usr/lib/jvm/java-7-oracle/bin/jps 63 --slave /usr/share/man/man1/jps.1 jps.1 /usr/lib/jvm/java-7-oracle/man/man1/jps.1
    update-alternatives --quiet --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript 63 --slave /usr/share/man/man1/jrunscript.1 jrunscript.1 /usr/lib/jvm/java-7-oracle/man/man1/jrunscript.1
    update-alternatives --quiet --install /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd 63 --slave /usr/share/man/man1/jsadebugd.1 jsadebugd.1 /usr/lib/jvm/java-7-oracle/man/man1/jsadebugd.1
    update-alternatives --quiet --install /usr/bin/jstack jstack /usr/lib/jvm/java-7-oracle/bin/jstack 63 --slave /usr/share/man/man1/jstack.1 jstack.1 /usr/lib/jvm/java-7-oracle/man/man1/jstack.1
    update-alternatives --quiet --install /usr/bin/jstat jstat /usr/lib/jvm/java-7-oracle/bin/jstat 63 --slave /usr/share/man/man1/jstat.1 jstat.1 /usr/lib/jvm/java-7-oracle/man/man1/jstat.1
    update-alternatives --quiet --install /usr/bin/jstatd jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd 63 --slave /usr/share/man/man1/jstatd.1 jstatd.1 /usr/lib/jvm/java-7-oracle/man/man1/jstatd.1
    update-alternatives --quiet --install /usr/bin/native2ascii native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii 63 --slave /usr/share/man/man1/native2ascii.1 native2ascii.1 /usr/lib/jvm/java-7-oracle/man/man1/native2ascii.1
    update-alternatives --quiet --install /usr/bin/rmic rmic /usr/lib/jvm/java-7-oracle/bin/rmic 63 --slave /usr/share/man/man1/rmic.1 rmic.1 /usr/lib/jvm/java-7-oracle/man/man1/rmic.1
    update-alternatives --quiet --install /usr/bin/schemagen schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen 63 --slave /usr/share/man/man1/schemagen.1 schemagen.1 /usr/lib/jvm/java-7-oracle/man/man1/schemagen.1
    update-alternatives --quiet --install /usr/bin/serialver serialver /usr/lib/jvm/java-7-oracle/bin/serialver 63 --slave /usr/share/man/man1/serialver.1 serialver.1 /usr/lib/jvm/java-7-oracle/man/man1/serialver.1
    update-alternatives --quiet --install /usr/bin/wsgen wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen 63 --slave /usr/share/man/man1/wsgen.1 wsgen.1 /usr/lib/jvm/java-7-oracle/man/man1/wsgen.1
    update-alternatives --quiet --install /usr/bin/wsimport wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport 63 --slave /usr/share/man/man1/wsimport.1 wsimport.1 /usr/lib/jvm/java-7-oracle/man/man1/wsimport.1
    update-alternatives --quiet --install /usr/bin/xjc xjc /usr/lib/jvm/java-7-oracle/bin/xjc 63 --slave /usr/share/man/man1/xjc.1 xjc.1 /usr/lib/jvm/java-7-oracle/man/man1/xjc.1
    update-alternatives --quiet --install /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi 63
    update-alternatives --quiet --install /usr/bin/ControlPanel ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel 63
    update-alternatives --quiet --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/jre/bin/java 63
    update-alternatives --quiet --install /usr/bin/java_vm java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm 63
    update-alternatives --quiet --install /usr/bin/javaws javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws 63
    update-alternatives --quiet --install /usr/bin/jcontrol jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol 63
    update-alternatives --quiet --install /usr/bin/keytool keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool 63
    update-alternatives --quiet --install /usr/bin/pack200 pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200 63
    update-alternatives --quiet --install /usr/bin/policytool policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool 63
    update-alternatives --quiet --install /usr/bin/rmid rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid 63
    update-alternatives --quiet --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry 63
    update-alternatives --quiet --install /usr/bin/unpack200 unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200 63
    update-alternatives --quiet --install /usr/bin/orbd orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd 63
    update-alternatives --quiet --install /usr/bin/servertool servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool 63
    update-alternatives --quiet --install /usr/bin/tnameserv tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv 63
    update-alternatives --quiet --install /usr/bin/jexec jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec 63
    
  4. 在/usr/lib/jvm建一份.java-7-oracle.jinfo的清單,請注意這是個隱藏檔,所以檔名是有個'.'
    sudo vim /usr/lib/jvm/.java-7-oracle.jinfo
    
    內容則如下
    name=java-7-oracle
    alias=java-7-oracle
    priority=63
    section=non-free
    
    jre ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel
    jre java /usr/lib/jvm/java-7-oracle/jre/bin/java
    jre java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm
    jre javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws
    jre jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol
    jre keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool
    jre pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200
    jre policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool
    jre rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid
    jre rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry
    jre unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200
    jre orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd
    jre servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool
    jre tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv
    jre jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec
    jdk appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer
    jdk apt /usr/lib/jvm/java-7-oracle/bin/apt
    jdk extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck
    jdk idlj /usr/lib/jvm/java-7-oracle/bin/idlj
    jdk jar /usr/lib/jvm/java-7-oracle/bin/jar
    jdk jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner
    jdk java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi
    jdk javac /usr/lib/jvm/java-7-oracle/bin/javac
    jdk javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc
    jdk javah /usr/lib/jvm/java-7-oracle/bin/javah
    jdk javap /usr/lib/jvm/java-7-oracle/bin/javap
    jdk jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole
    jdk jdb /usr/lib/jvm/java-7-oracle/bin/jdb
    jdk jhat /usr/lib/jvm/java-7-oracle/bin/jhat
    jdk jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo
    jdk jmap /usr/lib/jvm/java-7-oracle/bin/jmap
    jdk jps /usr/lib/jvm/java-7-oracle/bin/jps
    jdk jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript
    jdk jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd
    jdk jstack /usr/lib/jvm/java-7-oracle/bin/jstack
    jdk jstat /usr/lib/jvm/java-7-oracle/bin/jstat
    jdk jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd
    jdk native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii
    jdk rmic /usr/lib/jvm/java-7-oracle/bin/rmic
    jdk schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen
    jdk serialver /usr/lib/jvm/java-7-oracle/bin/serialver
    jdk wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen
    jdk wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport
    jdk xjc /usr/lib/jvm/java-7-oracle/bin/xjc
    plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
    plugin mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
    
  5. update java alternatives 這時準備工作就完成了,可以開始設定ubuntu預設使用的jdk了 先執行下列指令
    sudo update-alternatives --config java
    
    正常的話可以看到下列的提示
    There are 2 choices for the alternative java (providing /usr/bin/java).
    
      Selection    Path                                     Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-6-sun/jre/bin/java      63        auto mode
      1            /usr/lib/jvm/java-6-sun/jre/bin/java      63        manual mode
      2            /usr/lib/jvm/java-7-oracle/jre/bin/java   63        manual mode
    
    此刻再輸入號碼2,選擇jdk7做為預設的java版本
    當然也可以直接執行下列指令來改改
    sudo update-java-alternatives --set java-7-oracle
    

3 則留言:

AlanL 提到...
作者已經移除這則留言。
AlanL 提到...

你好,我照你的方法做完後要SET時跑出
update-alternatives: error: no alternatives for -javaplugin.so

指的是甚麼問題?是我漏了哪一步嗎?
謝謝

Unknown 提到...

我猜您有已經裝sun-java6-jdk,但沒有裝sun-java6-plugin sun-java6-fonts,所以會出現這樣的訊息。