なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

【Gradle】JAVA_HOME is set to an invalid directory

Kotlin で構成するプロジェクトでGradleを使用としたところ下記エラーで失敗

ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/java-11-openjdk-amd64/bin/java

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

どうやら、JAVA_HOME の設定がかみあっていなさそう...

Gradle について

Gradle については以下を参照 https://gradle.org/

環境

  • WSL:Ubuntu(Windows11)

調査

エラーの詳細を確認したいので、Gradle の動きを確認

コマンドの中身を確認

which gradle

# 実行ファイルの場所
/mnt/c/gradle-7.4.2/bin/gradle

実行ファイルが mnt 配下のディレクト内にあることを確認 中身をviで開く

gradle の中身を確認

gradle ファイル内を以下の言葉で検索

Please set the JAVA_HOME variable in your environment to match the

おそらく、以下が原因

# Determine the Java command to use to start the JVM.

if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

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

特に怪しいのがこの JAVACMD にパスを格納している部分

  JAVACMD=$JAVA_HOME/bin/java

ちなみに、私の環境出でのJAVA_HOME

echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/bin/java

なので、

 -x "$JAVACMD"

部分では

/usr/lib/jvm/java-11-openjdk-amd64/bin/java/bin/javaにある実行ファイルを動かそうとしている
もちろんそのような場所に実行ファイルはないのでここが問題っぽい

修正

JAVA_HOME の修正

そもそも、JAVA_HOMEで直接実行ファイルを動かしているのが気持ち悪いので修正

vi ~/.bashrc

.bashrc内のファイルを修正

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin

確認

echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/bin/java

次に gradle のJAVACMDの値を修正

JAVACMD=$JAVA_HOME/java

これで、JAVACMDが正しく動くはずなので確認

gradle -v

Welcome to Gradle 7.4.2!

Here are the highlights of this release:
 - Aggregated test and JaCoCo reports
 - Marking additional test source directories as tests in IntelliJ
 - Support for Adoptium JDKs in Java toolchains

For more details see https://docs.gradle.org/7.4.2/release-notes.html


------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------

Build time:   2022-03-31 15:25:29 UTC
Revision:     540473b8118064efcc264694cbcaa4b677f61041

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          11.0.15 (Private Build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OS:           Linux 5.10.60.1-microsoft-standard-WSL2 amd64

正常に動作していることを確認できた

追記

JAVA_HOME自体はいろいろなところで使用されるので もしかしたら、JAVA_HOMEのみを修正したほうが良いかもしれない