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を開いてみる。
# 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
できたー
っていうかこれ、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
できたー
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