Gradleは正しく設定されていても、間違ったJAVA_HOMEを検出します


168

Gradleを実行しようとすると、次のエラーが発生します。

# gradle

ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/default-java

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

しかし、JAVA_HOME変数を確認すると、次のようになります。

# echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle

私のJAVA_HOMEは.bashrcで定義されており、ソースとして設定されていることを再確認しました。

実行するjava -versionと、JAVA_HOMEが正しく設定され、PATH上にあることも確認されます。

# java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

私はまた、その/usr/bin/javaシンボリックリンク/etc/alternatives/javaが次に正しくシンボリックリンクすることを確認しました/usr/lib/jvm/java-7-oracle/jre/bin/java

さらに、.bash_profileまたはに重複するJAVA_HOME定義がないことを確認しました/etc/profile

だから私の質問は/usr/lib/jvm/default-java、Gradleがどのように/なぜ見つけるのか、そしてさらに重要なことに、それを正しいディレクトリにポイントするにはどうすればよいですか?

JDKを必要とする他のプログラムは正常に動作するため、Gradleの問題だと思います。Gradleの再インストールも試みましたが、違いはありませんでした。

私は64ビットXubuntu(Ubuntu 13.10ベース)を実行しています


完全なエラー出力を提供してください。現状では、メッセージの発信元は明確ではありません。また、/usr/lib/jvm/default-javaディレクトリまたはシンボリックリンクはありますか?そして、どのようにGradleをインストールしましたか?
Peter Niederwieser 2014年

私はQを更新しましたが、それは完全なエラー出力です。/usr/lib/jvm/default-javadir はありません。aptを使用してインストール(apt-get install gradle)
James Barnett

Gradle起動スクリプトをJAVA_HOME設定する必要はありません。場合はJAVA_HOME設定されている、スクリプトの用途は$JAVA_HOME/bin/javaGradleのを実行します。それ以外の場合は使用しますjava(つまりjava、上にある必要がありますPATH)。おそらく(サードパーティの)aptパッケージは、変更された起動スクリプトを使用します。
Peter Niederwieser 2014年

ええ、私がバイナリを取得したどのppaも、ハードコーディングしてJAVA_HOMEをにエクスポートしたように見えますusr/lib/jvm/defult-java。助けてくれてありがとう
James Barnett

あなたがやったのsource ~/.bashrcか、JAVA_HOMEを設定した後、マシンを再起動しますか?
IgorGanapolsky 2015

回答:


263

私がUbuntu 13.10リポジトリ自体からダウンロードした特定のGradleバイナリ自体が JAVA_HOMEをエクスポートしようとしていることがわかりました。ルーカスのおかげでこれを提案してにます。

/usr/bin/gradle 70行目:

export JAVA_HOME=/usr/lib/jvm/default-java

この行をコメント化すると問題が解決し、GradleはJavaバイナリへの正しいパスを見つけます。

彼らのウェブサイトからバイナリをダウンロードしただけでは、この問題はありません。これは、Ubuntuレポバージョンの問題です。13.10バージョンには他にもいくつか問題があるようです。


Gradleパッケージは、jdkをこの場所にインストールしているように見えます。少なくとも、デフォルトのリポジトリのみのUbuntu 12.04 LTSでは。私はJavaを持たないUbuntu VMでこれを行い、最初にスナップショットを作成し、apt-get install gradle(これは約400個のパッケージをインストールします)を実行し、javaを/ usr / lib / jvmにインストールしました...スナップショットを元に戻しましたが、/ usrはありません/ lib / jvm。私はJAVA_HOMEをエクスポートするGradleスクリプトの理論をテストしていました。
Joshua McKinnon 2014年

2
Gradleはこれを行いません。PPAは他の誰かによって提供されるので、あなたは彼らに尋ねなければなりません。一般的に、パッケージマネージャー経由でインストールするのではなく、Gradleラッパー経由でGradleをブートストラップすることをお勧めします。
Peter Niederwieser

回答を更新して、Gradle自体ではなく、Ubuntuリポジトリのバージョンが問題であることを明確にしました。
James Barnett

11
ありがとう、この問題の解決策を1時間以上探しています。この投稿をありがとう、ubuntu 14.04の問題を解決します
Kay Schneider

1
あなた自身の問題を解決する方法(そして同時に私のもの)!この質問が1年前のものであり、リポジトリ内のGradleスクリプトがこれを修正するように更新されていないのは残念です。
sotrh 2015年

49

シンボリックリンクを追加する

sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java

@Narは、JAVAのインストールパスを提供してください
Shashi

回答ありがとうございます。Jamesstackoverflow.com/a/22309017/ 1679348
Nar

5
私にとってはうまくいきました。名前(default-java)を考えると、これはかなり賢明なアプローチだと思います。
Phil

2
私の意見では、これはGradleファイルを変更するよりもはるかに優れたソリューションです。(そして、はい、それは私にとってはうまく
いき

ありがとうございます!あなたは私の時間を節約しました!
AlexKh

21

解決策は、javacが次のように存在するビンの上にJAVA_HOME == dirを作成することです

type javac

javac is /usr/bin/javac   # now check if its just a symlink

ls -la /usr/bin/javac 

/usr/bin/javac -> /etc/alternatives/javac   # its a symlink so check again

ls -la /etc/alternatives/javac  # now check if its just a symlink

/etc/alternatives/javac -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javac

OK、最後に実際のjavacの上のビンを見つけたので、これを行う

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

上記は単純化して一般化することができます

which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)  )))

13

私にとって、このエラーはGradlesudoとしてインストールされた理由が原因でしたと、デフォルトのユーザーとしてGradleを実行しようとしたことがでした。

試してください:

sudo gradle -version

または

sudo gradle -v

7

の最新バージョンをインストールしてみてくださいgradle

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

Ubuntuリポジトリからインストールすると、古いバージョンがインストールされます(私にとってはGradle 1.4でした)。古いバージョンでは、gradleからjavaホームをとして設定しexport JAVA_HOME=/usr/lib/jvm/default-javaます。最新バージョンにはこの問題はありません。


5

あなたはexportあなたでしたJAVA_HOMEか?エクスポートしないと、設定はそのシェルの内部で開始されたコマンドに伝播されません。また、java -versionは使用せず、パスでJAVA_HOME最初にjava見つかったものを使用します。.bashrc次のようになっていることを確認してください。

JAVA_HOME=/path/to/java/home
export JAVA_HOME

1
はい、それは.bashrcで次のように定義されていますexport JAVA_HOME=/usr/lib/jvm/java-7-oracle(わずかに異なる構文ですが、私は同じと想定しています)
James Barnett

3
@JamesBarnett、gradleコマンド自体がその変数を設定できますか?おそらく、インストールした人がgradle、アプリケーションを開始する前に環境変数を設定するラッパースクリプトを作成しました。tomcatを使用する場合、catalina.sh(起動スクリプトである)がを呼び出してsetenv.sh環境変数を設定することは珍しくありませんJAVA_HOME
Lucas

4

Ubuntuで次のコマンドを実行すると、この問題に直面しました。

ionic build android

この問題を解決するために、次の手順を実行しました。

ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java

JAVA_HOMEを/ etc / environmentに追加します。

vi /etc/environment

追加:

JAVA_HOME="/usr/lib/jvm/default-java"

保存した後、それを読んでください:

source /etc/environment

最後に、ビルドコマンドを実行できます。


4

私は同じ問題を抱えていましたが、最新バージョン2.13のgradleファイルの70行目にエクスポートコマンドが見つかりませんでしたが、そこにある愚かな間違いを理解しています。

あなたはGradleのフォルダ/ binにGradleのファイルにエクスポートするコマンドでライン70が見つからない場合は/、その後、確認してくださいあなたの〜/ .bashrcにあなたが見つけた場合、 export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/javaは、削除/bin/javaのような、このラインからのJAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64代わりに>>>パスでそれをし、これのexport PATH=$PATH:$HOME/bin:JAVA_HOME/ことexport PATH=$PATH:$HOME/bin:JAVA_HOME/bin/javaです。次に実行しますsource ~/.bashrcます。

その理由は、gradleファイルを確認すると、70行目(exportコマンドがない場合)または75行目にあります。

JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

つまり /bin/java、すでにそこにあるので、JAVA_HOMEパスから差し引く必要があります。

それは私の場合に起こりました。


4

私のUbuntuでは、この問題で2日間頭痛がします。

手順1.端末に入力すると、whereis java 次のように表示されます

java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz

ステップ2.パスをメモします。 /usr/lib/jvm/java-8-openjdk-amd64/bin/java

除外する bin/java

あなたのJAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64


ここで重要なのは、/ bin / javaを除外することです
Borjante


2

gradleインストールフォルダー内のbinフォルダーに移動して、gradle.batファイルのJAVA_HOMEパラメーターを修正することもできます。私の場合、JAVA_HOMEはc:\ Program files \ java \ binに設定されていました。gradle.batのJAVA_HOMEは%JAVA_HOME%\ bin \ java.exeに設定されていました。

gradle.batのJAVA_HOMEを修正しました。

ありがとうございました!!!


その今2019とこれはまだ問題です!わずかに異なることを除いて、障害のある変数は「set JAVA_EXE =%JAVA_HOME%/ bin / java.exe」になりました-ここからビン部分を削除して修正してください。
Andy Lorenz

2
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java

default-javaディレクトリへのシンボリックリンクを作成します。

あなたはあなたのjavaディレクトリを見つけることができます

readlink -f $(which java) 
# outputs: /usr/lib/jvm/java-7-oracle/jre/bin/java
# Remove the last `/bin/java` and use it in above symbolic link command.

このコマンドの機能と必要な理由を説明すると、この回答は改善されます。
Ian McLaird 2016

2

コマンドを実行する前に、次のように入力してみてください。

export JAVA_HOME="path_to_java_home"

path_to_java_homeあなたのフォルダはどこですかbin/javaあるが。

javaが適切にインストールされている場合は、次のコマンドを使用して、その場所を見つけることができます。

readlink -f $(which java)

bin/java中に入れながらパスの最後から削除することを忘れないでくださいJAVA_HOME


1

私もこれに問題がありました。それが正しいときに間違ったディレクトリを言った。したがって、最後の/ bin / javaを省略して、JAVA_HOMEという名前のローカル変数を作成しました。それは私にとってはうまくいきました。


1

GRADLE_HOMEおよびJAVA_HOME環境が適切に設定されている場合は、JDKディレクトリを確認し、以下のパスにjava.exeファイルがあることを確認してください。

C:\Program Files (x86)\Java\jdk1.8.0_181\bin

gradle.batファイルに記載されているエラーのように

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

Javaのインストールを見つけることができません。だから見つけて設定

java.exe

%JAVA_HOME%/binすべてが正しい場合は。

これは私にとってはうまくいきます(私のアカウントはクライアントによって無効にされ、彼らの管理者は私のディレクトリからjava.exeを削除しました。)


0

私のdockercontainer(javaが見つからないという問題は最小限に抑えられていました)では、その「どれ」がインストールされていませんでした。gradlewを使用してプロジェクトをコンパイルすると、。/ gradlewでJavaインストールを見つけて問題を解決したものを使用しました。


0

[Windows]すでに述べたように、.bat -fileはjava.exeを%JAVA_HOME%/bin/java.exeそこから検索しようとするためbin、パスで2回繰り返されるため、java.exe は検索されません。gradle.bat /binからその余分なものを削除します。

Gradle


0

build.gradleに以下の行を追加すると、問題が解決しました。

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