web-dev-qa-db-ja.com

代替を使用したJavaバージョンの変更に関する問題

どうやってこの混乱に陥ったのかよくわかりませんが、何らかの理由で、代替手段を使用してJavaの現在のバージョンを変更することができません。代替案--configJavaを実行して選択内容を入力できますが、Javaまたはjavacのバージョン番号をエコーすると、毎回1.5が出力されます(代替案は現在の値を示していますが)バージョンは1.6)です。ちなみに、私が使用しているサーバーはRHEL5を実行しています。

代替で使用されるパスが正しいディレクトリを指していることを確認しました。これが私のセッションからのいくつかの出力です:

[brilewis @ myserver] $ Sudo/usr/sbin/update-alternatives --config Java

「Java」を提供する3つのプログラムがあります。

選択コマンド

** 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/Java
+ 2 /usr/Java/jdk1.5.0_10/bin/Java
3 /usr/Java/jdk1.6.0_16/bin/Java

入力して現在の選択を保持する[+]、または選択番号を入力します:3

[brilewis @ myserver] $ Java -version

Javaバージョン "1.5.0_10" Java(TM)2ランタイム環境、Standard Edition(ビルド1.5.0_10-b03)Java HotSpot(TM)サーバーVM(ビルド1.5.0_10- b03、混合モード)

[brilewis @ myserver] $ Sudo/usr/sbin/update-alternatives --config Java

「Java」を提供する3つのプログラムがあります。

選択コマンド

** 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/Java
2 /usr/Java/jdk1.5.0_10/bin/Java
+ 3 /usr/Java/jdk1.6.0_16/bin/Java

入力して現在の選択を保持する[+]、または選択番号を入力します。

更新:以下はecho $PATHの出力です。

/usr/Java/jdk1.5.0_10/bin:/usr/local/Apache-ant-1.7.1/bin:/usr/local/Apache-Tomcat-6.0.24:/usr/kerberos/bin:/usr/ local/bin:/ bin:/ usr/bin:/ usr/NX/bin:/ home/brilewis/bin

更新(4/26/10):Bertの提案に従い、/ etc/profileのPATH環境変数からJava_HOMEを削除しました。これを行った後、Javaのバージョンを変更するための代替手段を使用することができました。唯一の問題は、javacを実行しようとすると、「-bash:javac:コマンドが見つかりません」というメッセージが表示されることです。バージョンが1.5に設定されている場合、これは発生しません。

15
Brian

この問題を解決する唯一の方法は、/ var/lib/Alternatives/Javaを削除して、各JDKを再度インストールすることで最初からやり直すことでした。 javacとjarについても同じことをしました。これを行った後、問題なくバージョンを切り替えることができました。

3
Brian

Oracle Java 6u30の場合、RPMをインストールしたら、代替を構成できます。

/usr/sbin/alternatives --install "/usr/bin/Java" "Java" "/usr/Java/default/bin/Java" 2 \
--slave /usr/bin/javac javac /usr/Java/default/bin/javac \
--slave /usr/bin/javadoc javadoc /usr/Java/default/bin/javadoc \
--slave /usr/bin/jar jar /usr/Java/default/bin/jar \
--slave /usr/bin/keytool keytool /usr/Java/default/bin/keytool \
--slave /usr/bin/orbd orbd /usr/Java/default/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/Java/default/bin/pack200 \
--slave /usr/bin/rmid rmid /usr/Java/default/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/Java/default/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/Java/default/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/Java/default/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/Java/default/bin/unpack200 \
--slave /usr/share/man/man1/Java.1.gz Java.1.gz /usr/Java/default/man/man1/Java.1.gz \
--slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/Java/default/man/man1/keytool.1.gz \
--slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/Java/default/man/man1/orbd.1.gz \
--slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/Java/default/man/man1/pack200.1.gz \
--slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/Java/default/man/man1/rmid.1.gz \
--slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/Java/default/man/man1/rmiregistry.1.gz \
--slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/Java/default/man/man1/servertool.1.gz \
--slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/Java/default/man/man1/tnameserv.1.gz \
--slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/Java/default/man/man1/unpack200.1.gz

次に、構成をアクティブ化します。

/usr/sbin/alternatives --config Java

そして、メニューから/ usr/Java/default/bin/Javaを選択します。

さらに、manページをgzipで圧縮する必要があります

gzip /usr/Java/default/man/man1/*.1

また、Oracle Java RPMが代替シンボリックリンクを破壊した可能性があるため、強制的に正常にします。

ln -sf /etc/alternatives/Java /usr/bin/Java
32
user783522

次の手順を使用して、CentOSのデフォルトのJavaを変更できます。

  1. IBMJDKを追加します。

    alternatives --install /usr/bin/Java java /opt/WebSphere/AppServer/Java/bin/Java 3
    
  2. 新しいIBMJDKをデフォルトとして設定します。

    alternatives --config Java   (then select #3 in the list)
    
  3. タイプJava -versionプロンプトで結果を確認します。

6
djangofan

alternativesは、/usr/binディレクトリのシンボリックリンクを変更することで機能します。ただし、パスの前に有効な実行可能ファイルが含まれている場合は、代わりにそれが使用されます。

この場合、以前のコメントから判断すると、/usr/Java/jdk1.5.0_10/binがパスのどこかにあるため、削除する必要があるようです。

BASHシェルの場合、パスは通常~/.bashrcまたは(可能性は低いですか?)~/.bash_profileに設定されます。

3
Powerlord

より多くの説明で更新

  1. どのJava実行可能ファイルが実際に実行されているかを確認します。

    $ type Java

    これが/usr/bin/Java以外のものを示している場合は、パスに特定のJRE/JDKがハードコードされている可能性があります。これは問題ありませんが、特定のJRE/JDKをPATHにこのようにハードコードするアカウントのRH代替を使用するchange Javaバージョンを使用することはできません。ただし、特定のJDKバージョンをパスにハードコーディングしない他のパッケージ/アカウント(システムプロセスなど)は、alternativesで指定されたJREを使用します。

  2. Java_HOME環境変数を確認してください。

    $ echo $Java_HOME

    これが設定されている場合、Java実行可能ファイル自体がどこにあるかに関係なく、Java実行可能ファイルが別のJRE/JDKを指すことがあります。これも、これを設定することは珍しいことではありません。 、ただし、別のJava_HOMEをハードコードするアカウントに対してRH代替を使用するchange Javaバージョンを使用することはできません。

とはいえ、私のアカウントでの開発では、通常、システム設定に依存するのではなく、パスに特定のJDKを設定し、Java_HOMEを特定のJDKを指すように設定します。 RHの代替手段は、他のパッケージが使用するJavaバージョンを制御するのに適していますが、私自身の開発では、使用したいJavaを明示的にターゲットにするのが好きです。

1
Bert F

代替方法を使用する場合、代替方法を使用する場合は、最初にインストールする必要があります。 RPMにはこれがインストールの一部として含まれると思いますが、手動インストールを実行する場合でも、手動でインストールできます。たとえば、Javaの場合、

alternatives --install "/usr/bin/Java" "Java" "/usr/Java/example/bin/Java" \
 --slave /usr/bin/javac javac /usr/Java/example/bin/javac \
 ...

これは、Java symlinkの代替をインストールすることです。スレーブごとに、切り替えたときに、別の代替で指定された他の値にシンボリックリンクを構築/更新します。代替を使用してJavaの別のバージョンに切り替える必要があり、代替はjavacのスレーブを指定し、javacは新しいバージョンも再ポイントします。

私の完全なリストは次のとおりです。

alternatives --install /usr/bin/Java java /usr/Java/<version>/bin/Java 1500 \
  --slave /usr/bin/ControlPanel ControlPanel /usr/Java/<version>/jre/bin/ControlPanel \
   --slave /usr/bin/jar jar /usr/Java/<version>/bin/jar \
   --slave /usr/bin/javac javac /usr/Java/<version>/bin/javac \
   --slave /usr/bin/javaws javaws /usr/Java/<version>/bin/javaws \
   --slave /usr/bin/jcontrol jcontrol /usr/Java/<version>/bin/jcontrol \
   --slave /usr/bin/keytool keytool /usr/Java/<version>/bin/keytool \
   --slave /usr/bin/orbd orbd /usr/Java/<version>/bin/orbd \
   --slave /usr/bin/pack200 pack200 /usr/Java/<version>/bin/pack200 \
   --slave /usr/bin/policytool policytool /usr/Java/<version>/bin/policytool \
   --slave /usr/bin/rmid rmid /usr/Java/<version>/bin/rmid \
   --slave /usr/bin/rmiregistry rmiregistry /usr/Java/<version>/bin/rmiregistry \
   --slave /usr/bin/servertool servertool /usr/Java/<version>/bin/servertool \
   --slave /usr/bin/tnameserv tnameserv /usr/Java/<version>/bin/tnameserv \
   --slave /usr/bin/unpack200 unpack200 /usr/Java/<version>/bin/unpack200 \
   --slave /usr/share/man/man1/Java.1 Java.1 /usr/Java/<version>/man/man1/Java.1  \ 
   --slave /usr/share/man/man1/javac.1 javac.1 /usr/Java/<version>/man/man1/javac.1  \ 
   --slave /usr/share/man/man1/javaws.1 javaws.1 /usr/Java/<version>/man/man1/javaws.1  \ 
   --slave /usr/share/man/man1/keytool.1 keytool.1 /usr/Java/<version>/man/man1/keytool.1  \ 
   --slave /usr/share/man/man1/orbd.1 orbd.1 /usr/Java/<version>/man/man1/orbd.1  \ 
   --slave /usr/share/man/man1/pack200.1 pack200.1 /usr/Java/<version>/man/man1/pack200.1  \ 
   --slave /usr/share/man/man1/policytool.1 policytool.1 /usr/Java/<version>/man/man1/policytool.1  \ 
   --slave /usr/share/man/man1/rmid.1 rmid.1 /usr/Java/<version>/man/man1/rmid.1  \ 
   --slave /usr/share/man/man1/rmiregistry.1 rmiregistry.1 /usr/Java/<version>/man/man1/rmiregistry.1  \ 
   --slave /usr/share/man/man1/servertool.1 servertool.1 /usr/Java/<version>/man/man1/servertool.1  \ 
   --slave /usr/share/man/man1/tnameserv.1 tnameserv.1 /usr/Java/<version>/man/man1/tnameserv.1  \ 
   --slave /usr/share/man/man1/unpack200.1 unpack200.1 /usr/Java/<version>/man/man1/unpack200.1

お役に立てれば。

0
WingsOfPain