web-dev-qa-db-ja.com

Linux OpenJDK DebianベースのディストリビューションのJava_HOME環境変数の正しいターゲットは何ですか?

Windowsでは、Java_HOMEはJDKインストールフォルダーを指している必要があります(したがって、Java_HOME/binにはすべての実行可能ファイルが含まれ、Java_HOME/libsにはすべてのデフォルトjarライブラリが含まれます)。

SunのJDKバンドルをダウンロードしてLinuxにインストールすると、同じ手順になります。

ただし、KubuntuのデフォルトのOpenJDKパッケージを使用する必要があります。問題は、すべての実行可能ファイルが/usr/binに配置されることです。ただし、jarは/usr/share/Javaに配置されます。同じJava_HOMEフォルダーの下にないため、Grailsで問題が発生し、標準のJava構造を期待する他のアプリケーションで問題が発生する可能性があります。

  1. 私が使用する場合:

    Java_HOME=/usr
    

    任意のJava実行可能ファイルを使用するすべてのアプリケーションとスクリプトは、標準プロシージャcall $Java_HOME/bin/executableを使用できます。ただし、jarファイルは別の場所にあるため、常に検出されるわけではありません(例: grailsでは、native2asciiClassDefNotFoundを取得しています。

  2. 一方、私が使用する場合:

    Java_HOME=/usr/share/Java
    

    Java実行可能ファイル(Javajavacなど)が見つかりません。

では、DebianベースのLinuxでJava_HOME変数を処理する正しい方法は何ですか?

助けてくれてありがとう、ルイス

82
Luis Soeiro

最終的に私のために働いたもの(Grailsは現在スムーズに動作しています)は、スティーブBが指摘したようにほとんどしています:

Java_HOME=/usr/lib/jvm/default-Java

これにより、ユーザーがシステムのデフォルトJDKを変更した場合、Java_HOMEは引き続き機能します。

default-Javaは、現在のJVMへのシンボリックリンクです。

91
Luis Soeiro

複数のJavaバージョンを管理するために代替手段を使用する場合、Java_HOMEシンボリックリンクJava(またはjavac)に基づいて、次のようになります。

export Java_HOME=$(readlink -f /usr/bin/Java | sed "s:bin/Java::")
64
bbaassssiiee

Ubuntuの標準インストールでは、さまざまなJavaバージョンが/usr/lib/jvmに配置されているようです。パスにあるjavac、Javaは、これにソフトリンクされます。

Java_HOME環境変数を設定し、パスに新しいJava binがあることを確認する限り、好きな場所に独自のJavaバージョンをインストールしても問題はありません。 。

これを行う簡単な方法は、Javaホームをソフトリンクとして存在させることです。そのため、バージョンをアップグレードまたは切り替えたい場合は、これが指すディレクトリを変更するだけです。

/usr/bin/Java --> /opt/jdk/bin/Java,

/opt/jdk --> /opt/jdk1.6.011
5
Steve B.

Java_LIB変数も設定してみてください。

0
Cantillon

Fedoraユーザーの更新として、代替手段は現在のJavaディレクトリを/ usr/Java/defaultに設定します

java_HOMEを/ usr/Java/defaultに設定して、クラスパスで現在の選択肢を常に選択する必要があります。

HTH!

0
Greg Henry

JARファイルが見つからないという問題がある場合は、CLASSPATHがそれらのファイルの場所を含むように設定されていることも確認します。ただし、CLASSPATHはプログラムごとに異なる設定が必要な場合が多く、個々のプログラムに対して一意に設定できるものになることがよくあります。

0
MVang

覚えている限りでは、update-alternativesの代わりにupdate-Java-alternativesスクリプトを使用しました。そして、Java_HOMEを正しく設定しました。

0
Tobias Schulte

Ubuntuのopenjdk-6-jreおよびopenjdk-6-jre-headlessパッケージで同様の問題を発見しました。

私の問題は、openjdk-6-jreおよびopenjdk-6-jre-headlessパッケージを削除して再インストールすることで解決しました。代替は、openjdk-6-jreおよびopenjdk-6-jre-headlessパッケージの新規インストールでのみ更新されます。

以下は、パージ後のインストールのサンプルです。

aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists
aptitude install --without-recommends openjdk-6-jre # Installing without some extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-Java{a} Java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-Java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62267 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
Setting up tzdata-Java (2012e-0ubuntu0.10.04) ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/Java to provide /usr/bin/Java (Java) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode.
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode.
Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/Java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode.
...

上記のupdate-alternativesが実行されて、さまざまなJavaバイナリーへのリンクがセットアップされます。

このインストール後、/usr/binにリンク、/etc/alternativesにリンク、および/var/lib/dpkg/alternativesに各バイナリのファイルもあります。

ls -l /usr/bin/Java /etc/alternatives/Java /var/lib/dpkg/alternatives/Java
lrwxrwxrwx 1 root root  40 2013-01-16 14:44 /etc/alternatives/Java -> /usr/lib/jvm/Java-6-openjdk/jre/bin/Java
lrwxrwxrwx 1 root root  22 2013-01-16 14:44 /usr/bin/Java -> /etc/alternatives/Java
-rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/Java

パージせずにインストールすることでこれを比較しましょう。

aptitude remove openjdk-6-jre
aptitude install --without-recommends openjdk-6-jre
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-Java{a} Java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-Java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62293 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...

Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
...

ご覧のとおり、update-alternativesはトリガーされません。

このインストール後、Javaバイナリの/var/lib/dpkg/alternativesのファイル、/etc/alternativesのリンク、および/usr/binのリンクはありません。

/var/lib/dpkg/alternatives内のファイルを削除すると、update-Java-alternativesも破損します。

0
Saturn Junction

Ubuntu 12.04これは動作します...

Java_HOME =/usr/lib/jvm/Java-6-openjdk-i386/jre

0
Alex

あなたの問題を解決する更新された回答と、Oracleをインストールするための一般的な優れたハウツーJava 7はここにあります: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux

0
Jack

通常、Java_HOME環境変数はありません。 Java自身で設定できます。内部Java java.homeシステムプロパティが利用可能である必要があります。

0
iny