Skip to content

Instantly share code, notes, and snippets.

@AndreasMattsson
Last active October 28, 2019 14:14
Show Gist options
  • Save AndreasMattsson/47b5feb570b19f32866a38fbbcdb52a9 to your computer and use it in GitHub Desktop.
Save AndreasMattsson/47b5feb570b19f32866a38fbbcdb52a9 to your computer and use it in GitHub Desktop.
replacement for ./gradlew that automatically downloads and installs Zulu OpenJDK and/or gradle wrapper if missing before forwarding gradle commands
#!/usr/bin/env sh
set -e
##############################################################################
##
## Delegates to gradle wrapper, but downloads Zulu JDK first if JDK not found
##
##############################################################################
# Defaults:
zulu_jdk_version="zulu8.33.0.1-jdk8.0.192"
gradle_version="5.2.1"
gradle_distribution_type="all"
wrapper_dir="./"
# Allow override of defaults with command line arguments:
for arg; do
shift
[[ "$arg" = "--wrapper-dir"* ]] && wrapper_dir="$(echo ${arg}/ | cut -f2 -d= | tr -s /)" && continue
[[ "$arg" = "--zulu-version"* ]] && zulu_jdk_version="$(echo ${arg} | cut -f2 -d=)" && continue
[[ "$arg" = "--gradle-version"* ]] && gradle_version="$(echo ${arg} | cut -f2 -d=)" && continue
[[ "$arg" = "--gradle-distribution-type"* ]] && gradle_distribution_type="$(echo ${arg} | cut -f2 -d=)" && continue
set -- "$@" "$arg"
done
# Determine platform:
if [[ "$(uname)" == "Darwin" ]]; then
zulu_jdk_name="${zulu_jdk_version}-macosx_x64"
zulu_jdk_file="${zulu_jdk_name}.zip"
zulu_os="osx"
elif [[ "$(expr substr $(uname -s) 1 5)" == "Linux" ]]; then
zulu_jdk_name="${zulu_jdk_version}-linux_x64"
zulu_jdk_file="${zulu_jdk_name}.tar.gz"
zulu_os="linux"
elif [[ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]]; then
zulu_jdk_name="${zulu_jdk_version}-win_i686"
zulu_jdk_file="${zulu_jdk_name}.zip"
zulu_os="win32"
elif [[ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]]; then
zulu_jdk_name="${zulu_jdk_version}-win_x64"
zulu_jdk_file="${zulu_jdk_name}.zip"
zulu_os="win64"
else
echo "Failed: unable to determine OS"
exit 1
fi
# Download Zulu JDK if JAVA_HOME is missing:
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/javac" ]]; then
jdk_dir="$JAVA_HOME"
else
if [[ ! -d "./.jdk/${zulu_jdk_name}" ]]; then
curl -sS -Lo "./${zulu_jdk_file}" "https://cdn.azul.com/zulu/bin/${zulu_jdk_file}"
if [[ "$zulu_os" == "linux" ]]; then
mkdir ".jdk/"
tar -xvf "./${zulu_jdk_file}" --directory "./.jdk/" > /dev/null
else
unzip -o "./${zulu_jdk_file}" -d "./.jdk/" > /dev/null
fi
rm "./${zulu_jdk_file}"
fi
jdk_dir="`pwd`/.jdk/${zulu_jdk_name}/"
fi
pushd "${wrapper_dir}" > /dev/null
# Download Gradle Wrapper if missing:
if [[ ! -f "./gradle/wrapper/gradle-wrapper.jar" ]]; then
mkdir -p ./gradle/wrapper/
curl -sS -H "Accept: application/zip" "https://raw.githubusercontent.com/gradle/gradle/v4.9.0/gradle/wrapper/gradle-wrapper.jar" -o "./gradle/wrapper/gradle-wrapper-temp.jar"
echo "distributionUrl=https\://services.gradle.org/distributions/gradle-${gradle_version}-${gradle_distribution_type}.zip">"./gradle/wrapper/gradle-wrapper-temp.properties"
"${jdk_dir}/bin/java" -cp "./gradle/wrapper/gradle-wrapper-temp.jar" org.gradle.wrapper.GradleWrapperMain wrapper --gradle-version ${gradle_version} --distribution-type ${gradle_distribution_type}
rm "./gradle/wrapper/gradle-wrapper-temp.jar"
rm "./gradle/wrapper/gradle-wrapper-temp.properties"
fi
# Delegate Gradle tasks to gradlew:
./gradlew "$@" -Dorg.gradle.java.home="${jdk_dir}"
popd > /dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment