Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away