#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$SCRIPT_DIR" ROOT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" # ─── JDK resolution ─── java_major_version() { local java_bin="$1" local version_line version_line="$($java_bin -version 2>&1 | head -n 1)" printf '%s\n' "$version_line" | sed -E 's/.*version "([0-9]+)(\.[0-9]+)?.*/\1/' } is_supported_java() { local java_bin="$1" local major major="$(java_major_version "$java_bin")" [[ "$major" =~ ^[0-9]+$ ]] && [ "$major" -ge 17 ] && [ "$major" -le 21 ] } try_set_java_home() { local candidate if [ -n "${JAVA_HOME:-}" ] && [ -x "$JAVA_HOME/bin/java" ] && is_supported_java "$JAVA_HOME/bin/java"; then return 0 fi if command -v /usr/libexec/java_home >/dev/null 2>&1; then for candidate in 21 17; do if JAVA_HOME_CANDIDATE="$(/usr/libexec/java_home -v "$candidate" 2>/dev/null)" \ && [ -x "$JAVA_HOME_CANDIDATE/bin/java" ] \ && is_supported_java "$JAVA_HOME_CANDIDATE/bin/java"; then export JAVA_HOME="$JAVA_HOME_CANDIDATE" export PATH="$JAVA_HOME/bin:$PATH" echo "Using JAVA_HOME=$JAVA_HOME" return 0 fi done fi for candidate in \ /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home \ /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home \ /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home \ /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home \ /usr/lib/jvm/java-21-openjdk \ /usr/lib/jvm/java-17-openjdk \ /usr/lib/jvm/java-21-openjdk-amd64 \ /usr/lib/jvm/java-17-openjdk-amd64; do if [ -x "$candidate/bin/java" ] && is_supported_java "$candidate/bin/java"; then export JAVA_HOME="$candidate" export PATH="$JAVA_HOME/bin:$PATH" echo "Using JAVA_HOME=$JAVA_HOME" return 0 fi done return 1 } if ! try_set_java_home; then if ! command -v java >/dev/null 2>&1; then cat >&2 <<'EOF' ERROR: java was not found in PATH. Please install JDK 17 or JDK 21, then rerun this script. EOF exit 1 fi fi if ! command -v java >/dev/null 2>&1; then cat >&2 <<'EOF' ERROR: java was not found in PATH. Please install JDK 17 or JDK 21, then rerun this script. EOF exit 1 fi JAVA_VERSION_OUTPUT="$(java -version 2>&1 | head -n 1)" JAVA_VERSION="$(java_major_version java)" if ! [[ "$JAVA_VERSION" =~ ^[0-9]+$ ]]; then echo "ERROR: Unable to parse Java version from: $JAVA_VERSION_OUTPUT" >&2 exit 1 elif [ "$JAVA_VERSION" -lt 17 ] || [ "$JAVA_VERSION" -gt 21 ]; then cat >&2 </dev/null 2>&1; then echo "gradle" return 0 fi return 1 } if ! GRADLE_CMD="$(find_gradle)"; then cat >&2 <<'EOF' ERROR: Neither local Gradle, root gradlew, nor system gradle was found. Options: 1. Place Gradle 8.5 at ~/.gradle/gradle-8.5/ 2. Ensure the project root has gradlew 3. Install Gradle: brew install gradle EOF exit 1 fi echo "Using Gradle: $GRADLE_CMD" cd "$PROJECT_DIR" "$GRADLE_CMD" --no-configuration-cache build "$@"