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

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をダウンロード
    * http://gradle.org/gradle-download/
    * 「Complete distribution」リンクをクリックして、少し待ったら保存先を聞かれます。
* パスを通す
    * 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のパス設定の問題を疑ってみる。

##ググってみた
けど、めぼしい情報は出てこず。

* JAVA_HOMEにはJDKを指定しなきゃだめ
→指定してるの、JDKだし…
http://blog.olivinecafe.info/post/58977611799/gradleeclipsewindows

* JAVA_HOMEの末尾にセミコロンをつけちゃだめ
→末尾セミコロンなんてつけてないし…
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142543402

##起動バッチのソースを見てみた
グーグル先生が頼れない今、手がかりはソースしかなかろうと、gradle-2.11\bin\gradleを開いてみる。

```sh: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とかの設定変えなきゃじゃん。めんどくさ！

#オマケに
ググった結果の裏取りしてみた。

* JAVA_HOMEにはJDKを指定しなきゃだめ
    * 起動ソースを見た限り、これ本当か？と思ったので。。
    * http://blog.olivinecafe.info/post/58977611799/gradleeclipsewindows

```
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