Error in gradle/gradlew scripts


(Rolf Kocheisen) #1

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.