it-swarm-ja.com

なぜJava -versionはJava_HOMEで定義されたものとは異なるバージョンを返すのですか?

UbuntuOSでJava_HOMEを設定しようとしています。 jdk 1.7/usr/lib/jvmにコピーし、Java_HOME/etc/profileファイルに設定しました。

/usr/lib/jvmフォルダーの内容は次のとおりです。

[email protected]:~$ ls /usr/lib/jvm/
default-Java        Java-1.6.0-openjdk       Java-6-openjdk         Java-6-openjdk-i386  jdk1.7.0_01
Java-1.5.0-gcj-4.6  Java-1.6.0-openjdk-i386  Java-6-openjdk-common  Java-7-openjdk-i386

/etc/profileファイルの最後の数行は次のとおりです。

export Java_HOME=/usr/lib/jvm/jdk1.7.0_01
export PATH=$PATH:$Java_HOME/bin

Java -versionコマンドを実行すると、これをすべて完了した後、次の出力が得られます。

[email protected]:~$ Java -version
Java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)

ls -lahコマンドを実行すると、次の出力が得られます。

[email protected]:~$ ls -lah /usr/bin/Java
lrwxrwxrwx 1 root root 22 Sep 29 09:58 /usr/bin/Java -> /etc/alternatives/Java
[email protected]:~$ ls -lah /etc/alternatives/Java
lrwxrwxrwx 1 root root 45 Sep 29 09:58 /etc/alternatives/Java -> /usr/lib/jvm/Java-6-openjdk-i386/jre/bin/Java

誰かが私が欠けているものを教えてもらえますか?なぜUbuntuはまだ私のjdk7ではなくopenjdkを指しているのですか?

PS:私は これに似た 質問とその回答を見ましたが、その質問はWindows OSに関連しており、Ubuntuには関連していないので、Ubuntuにこの同様の質問を再投稿しています。

2
Shekhar

Java_HOME環境変数を設定し、それを使用してPATHを設定しました。ただし、設定するパスも既存のパスで構成されます。基本的に、既存のパスに何か他のものを追加しただけです。

JDK1.7へのパスは、パスの最後に追加されます。コマンドラインで「Java--version」と入力すると、システムは、コマンド「Java」を持つパスが見つかるまで、パスを最初から最後まで検索します。したがって、表示されているのは、他のJavaバージョンの1つから出力されたバージョンです。

私がUbuntuで通常行うことは、私のパスを見ることです。

echo $PATH

次に、先頭近くで可能なJVMパスを探します。その時点で、これを修正するためのいくつかのオプションがあります。

  1. システムを新しいJavaパスに向けるシンボリックリンクを作成します。

  2. 古いJavaバージョンを削除し、パスから削除します。

オプション2を選択します。不要なものを取り除くだけで混乱は少なくなります。

4
jmort253

私は個人的に、Ubuntu12.04の新規インストールでまったく同じ種類の問題に直面していました。私がしなければならなかったのは、次のコマンドを使用して特定のパッケージをアンインストールすることです。

Sudo apt-get remove openjdk-6-jre-headless

これにより、/ etc/Alternativesのリンクが削除され、インストールされているJava 1.7

これでjmort253の回答のポイント2が完了したので、共有したかっただけです。

2
Chris

私は同じ問題を抱えていました、そして答えはPATHに隠されています:

「$ env | grep Java」を実行すると、次のように表示されます。

PATH=/u01/app/Oracle/product/11.2.0/xe/bin:/home/rivaldo/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/Java/jdk1.6.0_14/bin:/home/rivaldo/bin/Eclipse.JEE.Kepler.64
Java_HOME=/usr/local/Java/jdk1.6.0_14
JDK_HOME=/usr/local/Java/jdk1.6.0_14

ただし、「Javaバージョン」を実行しても次のように表示されます。

Java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

私のPATHには「/Java/jdk1.6.0_14/bin」の前に「/ usr/bin」があり、「ll/usr/bin | grepJava」を実行していることがわかりました。

lrwxrwxrwx 1 root root 39 Jul 31 08:29 /etc/alternatives/Java -> /usr/lib/jvm/Java-7-Oracle/jre/bin/Java*

シンボリックリンクを正しいものに変更し、問題を解決しました。パスで順序を変更することもできます。

から

export PATH=$PATH:$Java_HOME/bin

export PATH=$Java_HOME/bin:$PATH
1
Ricardo Rivaldo