2016-08-23 14 views
1

背景

私は自分の仕事で主にJavaとScalaで働いていますが、多くのレガシーコードは最新のJDKに更新されていません。したがって、開発マシンにJDKバージョン5,6,7,8をインストールする必要があります。最近まで、私はArch Linuxを使っていましたが、私はOpenSuse Tumbleweedに切り替えました。私がJDKバージョンをインストールする方法は、Oracle WebサイトからRPMインストーラスクリプトをダウンロードし、1.5から始めて1.8まで動作させて、/usr/java/latestシンボリックリンクが正しいバージョンを指し示しているようにしました。複数のバージョンのJava JDKを同時にマシンにインストールするにはどうすればよいですか?

問題

前述のJDKのバージョンを再インストールした後、私はのIntelliJ IDEAにこれらのインストールを指すようにしようとしました。しかし、それは "The selected directory is not a valid home for JDK"というエラーで訴えました。私はこの問題とそのようなものに関してオンラインで多くのリソースを見つけましたが、私の場合はそれらの解決策のどれも助けませんでした。さらに、様々なJava実行ファイルのための/usr/binのシンボリックリンクは、/etc/alternativesディレクティブの大火を指していました。

答えて

3

ソリューション

どうやら、そのようtools.jarrt.jarなどのOracleリリースでは、これらの古いインストールからキーJARファイルの削除の仕方によって、インストールされているすべての以前のバージョンのJDKを破壊する傾向RPMスクリプト、。これにより、以前は機能していたJDKが開発者にとって役に立たなくなります。

最初の応答は、2番目のインストーラスクリプトを実行する前にインストールディレクトリの名前を変更することでした。しかし、RPMを実行すると、2番目のスクリプトを実行するときにJDKのバージョンが既にインストールされていると不平を言っています。したがって、ハックのハックは、あるバージョンをインストールし、そのディレクトリの名前を変更し、RPMでそのバージョンを "削除"することです(それに関連するファイルを見つけることができないと不平を言いますが)。 2番目のバージョンをインストールすることは自由です。インストールする最新バージョンに達するまで、前の手順を繰り返してください。

TL;ここでDR

は、同じマシン上で複数の作業JDKのバージョンを取得する手順は、次のとおりです

1.インストーラスクリプトを使用してJDKの最初のバージョンをインストールします。

:~# chmod a+x jdk-1_5_0_22-linux-amd64-rpm.bin 
:~# ./jdk-1_5_0_22-linux-amd64-rpm.bin -x 
:~# rpm -ivh --replacepkgs jdk-1_5_0_22-linux-amd64.rpm 

2.インストールディレクトリの名前を変更します:

:~# mv /usr/java/jdk1.5.0_22 /usr/java/jdk1.5.0_22-bak 

3. RPMはそのJDKのバージョンアンインストールします

:~# rpm -e jdk-2000:1.5.0_22-fcs.x86_64 

4.リンスをし、すべてのバージョンが

にインストールされるまで繰り返します。

:~# ls -la /usr/java 
default -> java7 
java5 -> jdk1.5.0_22 
java6 -> jdk1.6.0_45 
java7 -> jdk1.7.0_80 
java8 -> jdk1.8.0_101 
jdk1.5.0_22 
jdk1.6.0_45 
jdk1.7.0_80 
jdk1.8.0_101 
latest -> java8 

7.変更し、正しいへ/usr/binシンボリックリンク:正しいターゲットへのシンボリックリンク/usr/java変更

6.

:~# mv /usr/java/jdk1.5.0_22-bak /usr/java/jdk1.5.0_22 

ディレクトリ名の末尾から-bakを削除しますターゲット:

:~# ls -la /usr/bin/ja* 
jar -> /usr/java/default/bin/jar 
java -> /usr/java/default/bin/java 
javac -> /usr/java/default/bin/javac 
javadoc -> /usr/java/default/bin/javadoc 
javah -> /usr/java/default/bin/javah 
javaws -> /usr/java/default/bin/javaws 
0

は、Ubuntuの/ Linux上で、あなたは

更新代替--config javaの

を使用してJavaのバージョンを切り替えることができます。しかし前に、あなたはバージョンをインストールする必要があります。

あなたは(./install-java.sh)

#!/bin/sh 
(
lookforJdks=$PWD 
echo "Directory: $lookforJdks" 
jdks=`test -e ./javac || find $lookforJdks -type d -iname '*jdk1.*' 2> /dev/null` 
#set -e 
echo 'which jdk do you want to choose? looking for jdks. This might take a while' 
echo "$jdks" | awk '{printf("%5d : %s\n", NR,$0)}' 
read choose 
test -e ./javac || cd `echo "$jdks" | tr '\n' ',' | cut -d',' -f $choose`/bin 
for e in appletviewer extcheck idlj jar jarsigner java javac javadoc javah javap jconsole \ 
jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic \ 
schemagen serialver wsgen wsimport xjc jvisualvm jmc; do sudo update-alternatives \ 
--install /usr/bin/$e $e $(readlink -f ./$e) 100; done 
) 

echo "RUN update-alternatives --config java" 

複数のJVMをインストールし、JVM(複数可)を解凍したフォルダ内の実行を、このスクリプトを置くために、このスクリプトを使用することができます。

/opt/install-java.sh

次使用:更新代替--config javaの

+1

まだOracleのインストーラパッケージbreakiの問題を解決していません以前のバージョン。 *この解決策は、 '/ usr/bin/java'がどのバージョンを参照しているかに関係しています。 IDEで直接使用するJDKを指定するので、シンボリックリンク '/ usr/bin/java'は無関係です。問題は、新しいJDKをインストールした後に古いJDKが役に立たなくなることです。したがって、私はclusterfuckのソリューションを投稿した。 –

関連する問題