17

どうやってこの混乱に陥ったのかよくわかりませんが、何らかの理由で、代替手段を使用して現在のバージョンのJavaを変更することができません。Alternatives --config javaを実行して選択内容を入力できますが、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に設定されている場合、これは発生しません。

4

6 に答える 6

32

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
于 2012-02-07T16:18:13.893 に答える
8

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

  1. IBM JDK を追加します。

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

    alternatives --config java   (then select #3 in the list)
    
  3. プロンプトjava -versionで入力して、結果を確認します。

于 2012-02-29T01:26:14.593 に答える
4

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

于 2010-04-26T19:49:33.843 に答える
3

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

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

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

于 2010-04-23T19:04:44.083 に答える
1

より多くの説明で更新されました

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

    $ type java

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

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

    $ echo $JAVA_HOME

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

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

于 2010-04-23T18:50:54.973 に答える
0

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

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

これが行うことは、Java シンボリックリンクの代替をインストールすることです。スレーブごとに、別の代替で指定された他の値へのシンボリックリンクを、切り替えたときに構築/更新します。そのため、代替を使用して別のバージョンの 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

お役に立てれば。

于 2015-04-22T03:39:28.117 に答える