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.