web-dev-qa-db-ja.com

Ubuntu 14.04で複数のJDKが正しく機能していません

JDKバージョン(jdk1.7.0_21およびjdk1.7.0_55)

以下のようにインストールおよび構成されます。

jdk1.7.0_21

update-alternatives --install "/usr/bin/Java" "Java" "/usr/lib/jvm/jdk1.7.0_21/bin/Java" 1

update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_21/bin/javac" 1

update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_21/bin/javaws" 1

Sudo chmod a+x /usr/bin/Java 
Sudo chmod a+x /usr/bin/javac 
Sudo chmod a+x /usr/bin/javaws
Sudo chown -R root:root /usr/lib/jvm/jdk1.7.0_21

jdk1.7.0_55

update-alternatives --install "/usr/bin/Java" "Java" "/usr/lib/jvm/jdk1.7.0_55/bin/Java" 1

update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_55/bin/javac" 1

update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_55/bin/javaws" 1
Sudo chmod a+x /usr/bin/Java 
Sudo chmod a+x /usr/bin/javac 
Sudo chmod a+x /usr/bin/javaws
Sudo chown -R root:root /usr/lib/jvm/jdk1.7.0_55

そして、デフォルトのJDKを選択/変更しています

update-alternatives --config Java
update-alternatives --config javac
update-alternatives --config javaws

この後、Java -versionがデフォルトであるときにjdk1.7.0_55を実行すると、出力は次のようになります。

root@ssa-lpt:/usr/lib/jvm# Java -version
Java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

ただし、jdk1.7.0_21はデフォルトですが、次のようなメッセージが表示されます

Java:共有ライブラリのロード中にエラーが発生しました:libjli.so:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

私が発行する場合:libjli.soを見つける

/usr/lib/jvm/jdk1.7.0_55/jre/lib/AMD64/jli/libjli.so
/usr/lib/jvm/jdk1.7.0_55/lib/AMD64/jli/libjli.so

したがって、jdk1.7.0_21を選択したが、どういうわけかjdk1.7.0_55を指しているのは明らかです。

jdk1.7.0_55の名前を変更しようとしましたが、運はありません。

これを修正する方法がわからない。助けてくれてありがとう:)

Solution ::私のjdk1.7.0_21が壊れていたため、/usr/lib/jvm/にあるOracleから新しいコピー形式をダウンロードしました。

5
Suvasish Sarker

このエラーが表示される理由は多すぎます。

これらすべてのコマンドを1つずつ実行して、ここに出力を投稿してください。

  1. file /usr/bin/Java
  2. type /usr/bin/Java
  3. echo $Java_HOME
  4. echo $PATH
  5. ls -ahl /usr/lib/jvm

次に-update-alternativesを使用してjdk1.7.0_55を選択し、これを実行します

$ ldd $(which Java)

update-alternativesを使用してjdk1.7.0_21を選択し、これを実行します

$ ldd $(which Java)

それからjdk1.7.0_21でこれを実行します

$ Sudo Java -version

更新。答え

同じ問題を抱えているすべての人に:

まず、Sudo ldconfigを実行します。 いつでもldconfigを実行しても安全です

長い議論の後、jdk1.7.0_21が破損していると結論付けました。

決定方法:

  1. Java jdk1.7.0_21Sudo Java -versionを選択すると、rootとして実行してもエラーが発生します。
  2. find /usr/lib/jvm -name "libjli.so"、このコマンドは、libjlijdk1.7.0_21がインストールされているフォルダーにあることを示す必要があります。私たちの場合、そうではありませんでした。

その他の場合:

Jdkがroot:rootに属していることを確認します

/usr/bin/Javaが実行可能ファイルではなくシンボリックリンクであることを確認してください。

update-alternativesを使用している場合は、PATHを確認してください。JavaはPATHに含まれないようにしてください。

また、役立つリンクもここにあります。

https://unix.stackexchange.com/questions/16656/problem-to-launch-Java-at-debian-error-while-loading-shared-libraries-libjli

https://www.centos.org/forums/viewtopic.php?t=16398

https://superuser.com/questions/310371/problem-launch-Java-on-debian-error-while-loading-shared-libraries-libjli-so

3
c0rp