Gradleのインストールでパスの設定にコケた原因はこれだった

  • 3
    Like
  • 2
    Comment
More than 1 year has passed since last update.

Gradleをインストールしたときに苦労した、パスの設定の落とし穴についてのメモです。

要約

前提条件

  • OSはWindows8
  • Javaのバージョンは8
  • 環境変数の設定は「JAVA_HOME=(略)\jdk1.8.0_65\bin」←ここ重要

現象

gradle -vで怒られた

ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jdk1.8.0_
65\bin

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

解決策

JAVA_HOMEはbinを含めず「(略)\jdk1.8.0_65」で設定すればgradleが動くよ!

やったこと

  • Gradle2.11をダウンロード
  • パスを通す
    • PATHに「C:\gradle-2.11\bin」を設定する
  • コマンドラインでバージョン確認
    • gradle -v
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jdk1.8.0_65\bin

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

→これ。

試行錯誤

Javaのパス設定がおかしいぞと文句を言われるんだけども、そもそも今までEclipseとかで普通に開発できてたし…
と思いgradleのパス設定の問題を疑ってみる。

ググってみた

けど、めぼしい情報は出てこず。

起動バッチのソースを見てみた

グーグル先生が頼れない今、手がかりはソースしかなかろうと、gradle-2.11\bin\gradleを開いてみる。

gradle-2.11\bin\gradle
# 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 Java installation."
fi

はいはい。出てるエラーメッセージ見っけ。

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

はいはい。
$JAVA_HOME/bin/javaのコマンドが実行できなくてエラーになってると。

環境変数に設定しているJAVA_HOMEはJavaルート+bin。
つまり(略)\jdk1.8.0_65\bin\bin\javaが実行できないと。
うん、そりゃそうだ。そりゃあ動かなかろうよ。

というわけで、JAVA_HOMEのパスをbin抜きで、これでどうだ!

C:\Users\toon>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_65

C:\Users\toon>gradle -v

------------------------------------------------------------
Gradle 2.11
------------------------------------------------------------

Build time:   2016-02-08 07:59:16 UTC
Build number: none
Revision:     584db1c7c90bdd1de1d1c4c51271c665bfcba978

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_65 (Oracle Corporation 25.65-b01)
OS:           Windows 8.1 6.3 amd64

できたー :smiley:

っていうかこれ、Eclipseとかの設定変えなきゃじゃん。めんどくさ!

オマケに

ググった結果の裏取りしてみた。

C:\Users\toon>echo %JAVA_HOME%
C:\Program Files\Java\jre7

C:\Users\toon>gradle -v

------------------------------------------------------------
Gradle 2.11
------------------------------------------------------------

Build time:   2016-02-08 07:59:16 UTC
Build number: none
Revision:     584db1c7c90bdd1de1d1c4c51271c665bfcba978

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_67 (Oracle Corporation 24.65-b04)
OS:           Windows 8.1 6.3 amd64

できたー :smiley:
IDEにくっついてインストールしたJRE、とかであれば話は変わるのかもしれません。

JAVA_HOMEの設定はJDKでもJREでもよくて、
$JAVA_HOME/jre/sh/または$JAVA_HOME/bin/
にjava.exeがあれば大丈夫みたいですね。

疑問

そもそも、Javaのパス設定ってお作法として\binまで含めて指定するもんだと思っていたのですが、
binありとbinなし、どっちの方があるべき姿なんでしょう?
http://www.javadrive.jp/install/jdk/index4.html