63

さて、私はMacとOSXに少し慣れていませんが、私が働いている会社はOSXとWindowsマシンの組み合わせを使用しているので、Javaプログラムのトラブルシューティングを行うために1つ選びました。私が遭遇している問題は、OracleのWebサイトからJava 7をインストールすると、設定メニューが更新され、ダブルクリックすると.jarファイルが正しく実行されているように見えることですが、ターミナルウィンドウのバージョンはまだ1.6.0_43であり、ターミナルからの同じ.jarファイルは、古いバージョンが原因でランタイムエラーが発生します。

/ Library / Java / JavaVirtualMachines /に移動すると、空のフォルダーが表示されます。私が他の記事で見たものから、これはJava1.7.0のバージョンフォルダがあるべき場所です。何が起こっているのか分かりますか?ターミナルで正しいバージョンのJavaを使用するにはどうすればよいですか?

編集:@DWilchesは彼の元の答えにコメントします:(1)

total 64
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Mar 17 21:38 A
lrwxr-xr-x  1 root  wheel    1 Mar 17 21:38 Current -> A
lrwxr-xr-x  1 root  wheel   59 Mar 17 21:38 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

(2)

ls -ld /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Mar 17 21:38 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

編集:新しい答えの間違いで申し訳ありませんが、長い間元の投稿の編集をブロックするサイトに慣れすぎています...

4

4 に答える 4

134

JDK

Mac OSでは/usr/bin/java、友人は実際のJDKコマンドに委任するスタブです。これらのスタブは環境変数の設定を尊重しますが、これを機能させるには、 JREではなくJDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.htmlから)JAVA_HOMEをインストールする必要があります。 (http://java.comから)。

JDKは/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk(NNの値に関係なく)にインストールされるため、JAVA_HOME環境変数を1.7/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/Homeを使用するように設定します。代わりにを/usr/bin/javaポイントするだけで、1.6に戻すことができます。このツールを使用して、適切な値を自動的に見つけることができます。たとえば、Java7を使用することができます。JAVA_HOME/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/usr/libexec/java_home/usr/bin/java

export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'`

Java 6を使用するために、次のことができます。

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`

同じことがJava8にも当てはまります(を使用-v '1.8*')。これにより、関連するメジャーバージョンの最新のインストール済みJDKが取得されますNN。更新をインストールするときに、手動で変更することを覚えておく必要はありません。

JRE

コマンドラインから1.7または1.8JREを実行する場合は、にあります/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java。これは固定パスであり、一度にインストールできる「パブリック」JREは1つだけです。

$ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

シェルエイリアスを使用できます.bashrc

alias java_jre='/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java'
于 2013-03-25T21:57:21.093 に答える
11

問題は、OracleのJREインストールが/ usr / bin/java実行可能ファイルを変更しないことです。このJavaを使用する場合は、/ Libraryの下のパスを使用する必要があります(これがJDKをインストールしているので、異なる可能性があるものを見つける必要があります)

OracleのJREインストールドキュメントによる

OracleからJREをインストールしても、javaバージョンのシンボリックリンクが更新されたり、パスにjavaが追加されたりすることはありません。これを実行できるようにするには、JDKをインストールする必要があります。

Oracle JDKは/usr/bin/java、Java7実行可能ファイルを指すように変更されます。開発を行っている場合は、JRE以外のものが含まれているため、これを使用する必要があります。

Oracleのインストールに関するFAQによると

Q:JREまたはJDKをインストールする必要がありますか?

A:Javaアプリケーションを実行する場合は、Javaランタイム環境(JRE)をインストールしてください。JREはOracleJavaとも呼ばれます。JREをインストールしたら、JARファイル、JNLPファイルをダブルクリックし、ブラウザを介してJavaアプレットとアプリケーションを起動できます。32ビットモードのFirefoxやChromeなどの32ビットブラウザは、JREではサポートされていないことに注意してください。

Javaアプリケーションを作成する場合は、Java Development Kit(JDK)をインストールしてください。

于 2013-03-25T21:47:11.880 に答える
5

まず、コンソールを終了して再度開き、PATH変数の変更を取得できるようにしましたか?

すでにこれを行っている場合は、Javaのデフォルトバージョンがどれであるかを確認してください。

dwilches@ ~$ cd /System/Library/Frameworks/JavaVM.framework/Versions/
dwilches@ Versions$ ls -l
lrwxr-xr-x  1 root  wheel   59 Mar 19 10:07 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel    1 Mar 19 10:08 Current -> A
drwxr-xr-x  8 root  wheel  272 Mar 25 10:03 A

これで、「現在の」バージョンが「A」(これが私のJava7)であることがわかります。Java 1.6に変更したい場合は、次のように記述できます。

dwilches@ Versions$ sudo unlink Current
dwilches@ Versions$ sudo ln -s 1.6 Current

その後:

dwilches@ Versions$ java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode)

したがって、これを使用して、「現在」が目的のJavaの場所を指すようにすることができます。

于 2013-03-25T21:13:36.040 に答える
-1

Ianが言ったように、おそらくjava7を.shスクリプトから呼び出す必要があるため、.bash_profileにエイリアスの代わりに関数を追加する必要があります。

java7() {
    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java "$@"
}
export -f java7
于 2013-11-09T22:56:02.170 に答える