12

の正しいパスを決定することは、 Ubuntuシステムでは代替手段を使用するためJAVA_HOME、少し複雑です。私のマシンでは、これは、代替が実際のjavaまたはjavacに到達する前に少なくとも2つのレベルの間接参照を作成する方法です。

usr/bin/javac -> /etc/alternatives/

/etc/alternatives/java -> /usr/lib/jvm/jdk1.7/bin/javac

に設定JAVA_HOMEした場合、別のJavaを使用するように代替を更新する/usr/lib/jvm/jdk1.7と、システムJavaがが指すJavaと矛盾する可能性があります。JAVA_HOME

JAVA_HOME私の質問は、代替案を使用するシステムでの正しい値は何ですか。JAVA_HOME私はそれをに設定する必要があると思う傾向があります/usr

このようにして、 TOMCATまたはそれを使用するその他のソフトウェアは、「bin」を追加して、JAVA_HOME必要なすべての実行可能ファイルを検索します。

JAVA_HOMEこれは、代替を使用するシステムの正しい値ですか。ほとんどのソフトウェアJAVA_HOMEは実行可能ファイルを見つけるためだけに使用しますか、それともJDKにバンドルされている他のアーティファクト(セキュリティポリシーファイルなど)を見つけるために値を使用しますか?前者が当てはまる場合は、に使用できると思います/usrJAVA_HOME、後者が当てはまる場合はJAVA_HOME、代替機能を犠牲にするしか方法がないと思います。

4

2 に答える 2

8

良い質問-私はLinuxで「代替」を使用し、すべてが「正しく機能する」-私は実際にそれについて考える必要はありませんでした。

私はこれが答えだと信じています:

1)「alternatives」は、「実際の」Javaが現在構成されているものにシンボリックリンクを設定します

2)必要なのは$JAVA_HOMEをシンボリックリンクに設定することだけです

于 2012-08-23T06:38:46.777 に答える
1

この問題の適切な直接的な解決策が見つからなかったので、これが私の回避策です。bachrcに以下を追加します。

javapath=$( readlink --canonicalize /usr/bin/java)
removebin="/bin/java"
removejre="/jre"
javapath2=${javapath/$removebin/}
export JAVA_HOME=${javapath2/$removejre/}

次に、代替手段を使用してJavaバージョンを変更するたびに、sourceを実行してJAVA_HOMEをリロードします。

source ~/.bashrc 

説明:私が行ったことは、update-alternativesアプリによって設定された変数からjavaクラスパスを取得し、そこからbin / java部分を削除して、JAVA_HOMEに割り当てることです。このプロセスは、システムへのログイン時に発生します。セッションの途中でJavaバージョンを変更した場合は、プロファイルをリロードする必要があります。

于 2021-01-08T18:00:19.933 に答える