I’m evaluating Gradle 1.5 and I’ve tried to set up a build for some java projects using the Gradle wrapper.
I found that I have to immediately fix the wrapper script gradlew b/c it can’t find java. The issue is in the following lines (lines 72 - 74):
... 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" ...
This is actually ironic, since I am using an IBM JDK on AIX, and there is no “jre/sh” directory. The correct path would be “$JAVA_HOME/jre/bin/java”.
After that I’m still getting the error
“Unable to find the ‘java’ executable. Tried the java home: and the PATH. We will assume the executable can be ran in the current working folder.”
I haven’t been able to chase down where this is coming from, but it has the correct path to JAVA_HOME; it just can’t make the leap to JAVA_HOME/jre/bin/java. However, it does run the build correctly in spite of that error.
If I set JAVA_HOME and PATH in my environment, all this goes away. In that case, the relevant lines in gradlew are (around line 85)
if ... (see above) ... 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
I wonder if, instead of setting JAVACMD in the initial code snippet, it would make sense to check for JAVA_HOME and if found, modify the PATH to “$PATH:$JAVA_HOME/jre/bin”.
Or force the issue on the environment variables being set? I.e. don’t even bother setting JAVACMD or anything else. Just do a check for JAVA_HOME and “java” being found on the path, and if not then fail gracefully as in the latter code snippet.