すべてのJava関連の代替を更新する方法はありますか?


52

を使用してすべてのJava関連の代替をすばやく切り替える方法はありupdate-alternativesますか?

たとえばsudo update-alternatives --config java、Javaを7に切り替える場合は、Java 7 OpenJdk を実行して選択します。しかし、私が実行するupdate-alternatives --get-selections | grep javaと、次のようになります、

appletviewer                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/appletviewer
extcheck                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/extcheck
idlj                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/idlj
itweb-settings                 auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/itweb-settings
jar                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jar
jarsigner                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jarsigner
java                           manual   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
javac                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javac
javadoc                        auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javadoc
javah                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javah
javap                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javap
javaws                         auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws
jconsole                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jconsole
jdb                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jdb
jexec                          auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jexec
jhat                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jhat
jinfo                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jinfo
jmap                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jmap
jps                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jps
jrunscript                     auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jrunscript
jsadebugd                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jsadebugd
jstack                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstack
jstat                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstat
jstatd                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstatd
keytool                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/keytool
native2ascii                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/native2ascii
orbd                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/orbd
pack200                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/pack200
policytool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/policytool
rmic                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/rmic
rmid                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmid
rmiregistry                    auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmiregistry
schemagen                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/schemagen
serialver                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/serialver
servertool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/servertool
tnameserv                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/tnameserv
unpack200                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/unpack200
wsgen                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsgen
wsimport                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsimport
xjc                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/xjc

ご覧のとおり、私のJavaの代替は7に切り替えられましたが、OpenJDK 6に基づく他のすべての代替は切り替えられませんでした。もちろん、それぞれを手動で切り替えるか、スクリプトを作成して切り替えることができますが、これを実現するためのより良い方法があると思います。

回答:


70

update-java-alternativesfromは(java-commonパッケージから)使用することです。

そのため、OpenJDK 6〜7にupdate-java-alternatives -l移行するために、Javaの代替のリストを取得してsudo update-java-alternatives -s java-1.7.0-openjdk-amd64から、JDKを使用しました。

注:上記のコマンドは次のエラーをスローしました。

update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

これは、openjdkプラグインがデフォルトでインストールされていないためです。実行を修正するには

sudo apt-get install icedtea-7-plugin

そして再実行しupdate-java-alternativesます。


8
プラグインをインストールする必要はありません(セキュリティ上の理由から、必要ない場合はインストールしないでください)。update-java-alternativesプラグイン設定がエラーをスローした場合でも、他のすべてのJavaの代替を変更します。
ダニエルクルマン

Oracles JVMとは何ですか?どうすればそれを使用できますか?そして、JDK固有の実行可能ファイル?
ケイキ14年

2
update-java-alternatives --set java-1.8.0-openjdk-amd64まだ走っていますdefault-java -> /usr/lib/jvm/java-7-oracle。これはno alternatives for mozilla-javaplugin.soエラーが原因ですか?これをどのように変更できますか?
ロニー

3

jbroはhttp://ubuntuforums.org/showthread.php?t=1817528で同じ質問をし、この問題のスクリプトを書きました。

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

より良い答えがない場合、これは確実な回避策のように見えますが、update-alternativesこれを処理するためのより良い方法がなければならないと思います。

インストールする前に変更を行うことができないため、コードを少し編集しました。次の2行を追加しました...

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
echo "-> update-alternatives --install /usr/bin/$alternative $alternative $newpath 1"
update-alternatives --install /usr/bin/$alternative $alternative $newpath 1
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done


1

<TL; DR> update-java-alternativesは、.jinfoファイルを使用して、切り替える代替手段を決定ますが、それらが個別に構成されていることも期待します。

ダウンロードしたJRE / JDKがupdate-java-alternativesで切り替えられない場合は、新しい.jinfoファイルとupdate-alterntiveエントリを作成します

[詳細]

手動で構成するには:

  1. 新しいjdkを既存のjdkと一緒に解凍します /usr/lib/jvm/

  2. フォルダー内の別の.jinfoファイルを複製して、.jdkname.jinfoファイルを生成します(または別のUbuntuインストールからファイルを取得します:他のテンプレートと同じようにテンプレートを使用します)。

    ファイル名。jdkname .jinfoはjdk foldernameと一致する必要があります。

    コンテンツを変更して、ヘッダー(名前)とファイルパス(プログラムエントリ)を設定し、新しいインストールに一致させます。

    バージョンで省略されているプログラムを参照する行を削除し、新しいプログラムの行を追加します /bin

  3. このテンプレートを使用して、.jinfoパッケージに含まれるすべてのプログラムの代替を生成します。

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100

    (いくつかの関連する回答がこれを/ binの内容からスクリプト化したか、.jinfoファイルで正規表現検索/置換を実行してスクリプトコマンドを生成できます。)

    100は、autoフラグを使用してjdkバージョンを設定するときに考慮される優先順位にすぎないことに注意してください。

  4. Javaの代替を確認し、JDKを使用するように切り替えます。

    update-java-alternatives -l  
    update-java-alternatives -s jdkname  

    一部のJDKにはJREが含まれていないため、JREを追加または削除することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.