LinuxですべてのユーザーのJAVA_HOMEを設定する方法


185

Linuxシステムは初めてですが、Javaフォルダーが多すぎるようです。

java -versionは私に与えます:

  • Javaバージョン「1.7.0_55」
  • OpenJDKランタイム環境(rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64ビットサーバーVM(ビルド24.51-b03、混合モード)

Mavenプロジェクトをビルドしようとすると、エラーが発生します。

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

rootおよび非rootユーザー用に変更する必要のあるファイルと、Javaの正確な場所を教えてください。

回答:


352
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    非特権ユーザーとしてログインした場合は、sudoを先頭に追加します。 sudo vim

  3. 「i」を押して挿入モードにします
  4. 追加:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. ログアウトして再度ログインするか、再起動するかsource /etc/profile、現在のシェルにすぐに変更を適用するために使用します

29
コピーと貼り付けだけで問題が発生する可能性があるため、二重引用符を削除してキーボードから再作成することを忘れないでください。
Sunil Kumar

12
@rbaleksandar一部のアプリケーションはに依存しておりJAVA_HOME、設定にも影響はありません。
ラフィアン、2015

2
IntelliJはそのようなアプリケーションであり、マイナーではありません。
ピート

12
source /etc/profile変更をすぐに有効にするには、実行する必要があります!
Mohamed Taher Alrefaie 2016年

1
これは私に正しい方向を示しました。/etc/profile.d/jdk.sh私のシステムには、実際には古いものが浮かんでいました。
ヘルマン、

109

すべてのユーザーに対して、次の行を /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

これは動的に更新され、代替システムでうまく機能します。ただし、更新は新しいログインシェルでのみ行われることに注意してください。


10
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")代わりに単純なJRE(ヘッドレスであっても)の使用のみに準拠する-私は使用するだけでjava、使用しないことに注意してくださいjavac
Roman Kruglov

@occulta少なくともMavenは、JAVA_HOMEがJDKを指すことを期待し、それを使用してJavaコンパイラーを見つけます。
Eero Aaltonen 2017

1
readlink5年前のスレッドであっても、互換性のあるソリューションに賛成して更新/アップグレードしてください。/ etc / profileを編集しないことをお勧めしますが、エクスポートをカスタムファイル内に配置します。たとえば/etc/profile.d/java_environment.sh、おそらくchmod +x java_environment.sh再起動する必要があります。
ChristophS

完璧です。私の不格好なdirnameソリューションよりも優れています。あなたが私のようなもので、ここで何が起こっているのかを理解したいのであれば、これは入力からの一致するテキストを空の文字列に置き換えるだけです。置換の「デフォルト」の文字は/ですが、一貫している限り/、何でも置き換えることができます。この場合/、パスの区切り文字として使用するコロンです。
Ungeheuer

35

/ etc / profileまたは/etc/profile.d/jdk_home.shのようなファイルを使用できます

export JAVA_HOME=/usr/java/jdk1.7.0_05/

このファイルは新しいログインシェルでのみロードされることを覚えておく必要があります。そのため、bash -lまたは新しいgnome-sessionの後、新しいJavaバージョンで変更されないことを覚えておいてください。


1
少なくとも私のLinux(raspbian)では、/ etc / profileがソースに/etc/profile.d/*.shなるので、ファイルを呼び出しjdk_home.shてソースを取得する必要があります
Hilikus

ありがとう@Hilikus :-)私はそれに応じて変更しました。
2017

2
ありがとうございました。私は両方の世界のベストのためにあなたと
@Eero

1
これが最良の答えです
ジェイコブ

/etc/profile.d/jdk_home.shはるかにきれいな答えは、少なくともためにされてUbuntuで/etc/profileすでにそんなにロジックで凝集されます。さらに追加するのは賢明ではないようです...
Ng Sek Long

30

他の回答のいずれにも設定、RHEL 7で私のために「固着しない」し、JAVA_HOMEかつPATH直接的に/etc/profileまたは~/.bash_profile仕事だろうではありません。JAVA_HOMEが設定されているかどうかを確認しようとするたびに、空白になります。

$ echo $JAVA_HOME
    (<-- no output)

私がしなければならなかったことは、スクリプト/etc/profile.d/jdk_home.sh次のように設定することでした。

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

最初は最初の行(#!/bin/sh)を無視しましたが、それがないと機能しません。

今それは働いています:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

RHEL 7でも同じ経験がありました。エクスポートを〜/ .bash_profileから削除し、このアプローチを使用しました。
xpagesbeast

#!/ bin / shはjdk_home.shでは必要ありません。構成が完了したら、必ずログアウトしてから再度ログインしてください
kuhajeyan

12

Linuxでパスを設定するのは非常に簡単です。次のようにします。

Step-1端末を開いて入力 sudo gedit .bashrc

Step-2パスワードを聞いてきます。パスワードを入力すると、bashファイルが開きます。次に、最後に移動して以下を入力します

ステップ-3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

step-4 次に、ファイルを保存してファイルを終了します

上記はシングルユーザー用です。すべてのユーザーについて、以下の手順に従う必要があります

ステップ1 gedit /etc/profile

ステップ2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

ステップ-3 export PATH=$PATH:$JAVA_HOME/bin

お役に立てれば。ありがとう!


2
この回答は、現在のユーザーにのみ設定します。
Manuel Manhart、2016年

ありがとう@ickyrr
PyDevSRS 2017

7

オラクルがしていることをしている(元サンの従業員として、私はそれに慣れることができない)

ln -s latestJavaRelease / usr / java / default
latestJavaReleaseは、使用するバージョンです

次にJAVA_HOME = / usr / java / defaultをエクスポートします


6

答えは以前の投稿が有効であるとされています。しかし、次の点に関して完全な答えはありません。

  1. / etc / profileを変更することは、(/ etc / profileに記述されているように)理由のために推奨されていません。
  • 何をしているかわからない場合は、このファイルを変更することをお勧めしません。/etc/profile.d/にcustom.shシェルスクリプトを作成して、環境にカスタムの変更を加えることをお勧めします。これにより、将来の更新でマージする必要がなくなるためです。*
  1. したがって、上記のように、カスタム変更用の/etc/profile.d/custom.shファイルを作成します。

  2. 現在、インストールされている新しいバージョンのJavaで常に更新を維持するには、絶対パスを指定せず、代わりに次のコマンドを使用します。

#jdkをJavaホームとして作成する場合

export JAVA_HOME = $(readlink -f / usr / bin / javac | sed "s:/ bin / javac ::")

または

#if jreをjavaのホームにする

export JAVA_HOME = $(readlink -f / usr / bin / java | sed "s:/ bin / java ::")

  1. そして#を忘れずにcustom.shファイルの/ bin / bash

4

インストールしたbinファイルのパスをコピーします

YOUR PATH

ターミナルを開き、次のコマンドを入力して環境ファイルを編集します。

sudo nano /etc/environment

このファイルで、次の行を追加します(YOUR_PATHコピーしたパスで置き換えます)。

JAVA_HOME="YOUR_PATH"

これで、環境変数を設定できます。このファイルをリロードしてください:

source /etc/environment

次のコマンドを実行してテストします。

echo $JAVA_HOME

3
olny効果現在の端末セッションを
ファティTürker

@FatihTürkerPCを再起動します
ジャック

jdk11を使用する私にとって、YOUR_PATHは/usr/lib/jvm/default-java/
Jack Giffin

2

Linuxでは、この行を〜/ .profileに追加します。

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
それは潜在的に正しい答えのようですが、それが機能する理由、つまりそれが何をし、OPの問題が何であるを説明できますか?また、「Linux上」と言いますが、Linuxディストリビューションはさまざまであり、すべてのディストリビューションでは機能しない可能性があります。どのディストリビューションで機能するかを追加してください。
Buurman、2015年

2

ステップ1-「echo $ JAVA_HOME」で現在のJavaバージョンを確認する

ステップ2-vim / etc / profile

ステップ3-ファイルの最後にエクスポートJAVA_HOMEがあります。ここで新しいパスを指定する必要があります。相対パスでないことを確認してください。

手順4-:wqを保存して終了する

ステップ5-「source / etc / profile /」、これは変更を実行します

手順6-もう一度エコー$ JAVA_HOMEを実行します-変更が反映されます。


2

1 ...ショートカットを使用してCtlr+ Alt+ T端子を開く

2 ...以下のコマンドを実行します:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ...(推奨)VM /コンピューターを再起動します。source /etc/sourceコンピュータを再起動したくない場合に使用できます

4 ...ショートカットを使用してCtlr+ Alt+ T端子を開く

5 ...検証済みのJAVA_HOME分割払い

echo $JAVA_HOME

flobからのワンライナーコピー、クレジット



1

新規ログインを使用する必要をなくすために、編集するプロファイルを入手することをお勧めします。

ソース/ etc /またはのいずれか。/等/

編集したプロファイルはどこにありますか。


1

JAVA_HOMEを設定するまでの間に、JAVA_HOMEまたはその他の環境変数を設定することのいくつかの利点を共有しましょう。

1)アプリケーションの起動とJAVA_HOMEを指す設定ファイルに影響を与えることなく、JDKを簡単にアップグレードできます。新しいバージョンをダウンロードし、JAVA_HOMEが新しいバージョンのJavaを指していることを確認するだけです。これは、環境変数またはリンクを使用する最良の利点です。

2)JAVA_HOME変数は、JDKインストールディレクトリへのフルパスではなく、短くて簡潔です。

3)JAVA_HOME変数はプラットフォームに依存しません。つまり、起動スクリプトがJAVA_HOMEを使用している場合、変更なしでWindowsおよびUNIXで実行でき、それぞれのオペレーティングシステムでJAVA_HOMEを設定するだけです。

詳しくはこちら:http : //javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

これは問題を解決するための非常に単純なスクリプトです

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

そしてテストのために:

echo $JAVA_HOME

1

コメントする権限がないので、回答として投稿します。

注意点:「That Dave Guy」が投稿した承認済みの回答に従ってください

変数を設定したら、それがインストールされているjavaディレクトリに適切な権限を設定してください。

chmod -R 755 /usr/java

1

すべての操作手順(Java、親ディレクトリの検索、ファイルの編集など)1つのソリューション

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

結果:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

説明:

1)コマンド全体をバラバラにしましょう

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2)JavaコマンドからJavaパスを見つける

# $(which java)
"/usr/bin/java"

3)シンボリックパスから相対パスを取得する

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4)の親パスを取得する /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5)の親パスを取得する /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

kafka-run-class.shを開きますsudoでをて書き込みます

あなたは見つけることができkafka-run-class.sh:あなたのカフカのフォルダにカフカ/ binに/ kafka-run-class.sh

これらの行を確認してください

ここに画像の説明を入力してください

else部分のJAVA変数を変更して、java / binのjava実行可能ファイルを指すようにします。以下のようなJAVA = "$ JAVA_HOME / javaの"


0

/ etc / profileで、それを開くと、そのファイルに書き込むことはお勧めしません。その代わりに、コマンドのスクリプト(test.shを想定)を/etc/profile.dフォルダーに移動し、そこにtest.shを配置します。インスタンスを再起動するたびに、/ etc / profileによって自動的に呼び出されます。


-1

私は次の行を使用します:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

〜/ .profileに追加すると、ログイン時にデフォルトのjavaディレクトリのベースが使用されます。これはbash用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.