|
| 1 | +#!/usr/bin/env bash |
| 2 | +# Prepare Codename One workspace by installing Maven, provisioning JDK 8 and JDK 17, |
| 3 | +# building core modules, and installing Maven archetypes. |
| 4 | +set -euo pipefail |
| 5 | +ROOT="$(cd "$(dirname "$0")/.." && pwd)" |
| 6 | +TOOLS="$ROOT/tools" |
| 7 | +mkdir -p "$TOOLS" |
| 8 | + |
| 9 | +JAVA_HOME="${JAVA_HOME:-}" |
| 10 | +JAVA_HOME_17="${JAVA_HOME_17:-}" |
| 11 | +MAVEN_HOME="${MAVEN_HOME:-}" |
| 12 | + |
| 13 | +os_name=$(uname -s) |
| 14 | +arch_name=$(uname -m) |
| 15 | +case "$os_name" in |
| 16 | + Linux) os="linux" ;; |
| 17 | + Darwin) os="mac" ;; |
| 18 | + *) echo "Unsupported OS: $os_name" >&2; exit 1 ;; |
| 19 | + esac |
| 20 | +case "$arch_name" in |
| 21 | + x86_64|amd64) arch="x64" ;; |
| 22 | + arm64|aarch64) arch="aarch64" ;; |
| 23 | + *) echo "Unsupported architecture: $arch_name" >&2; exit 1 ;; |
| 24 | +esac |
| 25 | + |
| 26 | +# JDK 8 is not available for Apple Silicon. Use the Intel build when running on macOS ARM. |
| 27 | +jdk8_arch="$arch" |
| 28 | +jdk17_arch="$arch" |
| 29 | +if [ "$os" = "mac" ] && [ "$arch" = "aarch64" ]; then |
| 30 | + jdk8_arch="x64" |
| 31 | +fi |
| 32 | + |
| 33 | +JDK8_URL="https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u462-b08/OpenJDK8U-jdk_${jdk8_arch}_${os}_hotspot_8u462b08.tar.gz" |
| 34 | +JDK17_URL="https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.16%2B8/OpenJDK17U-jdk_${jdk17_arch}_${os}_hotspot_17.0.16_8.tar.gz" |
| 35 | +MAVEN_URL="https://archive.apache.org/dist/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz" |
| 36 | + |
| 37 | +install_jdk() { |
| 38 | + local url="$1" dest_var="$2" |
| 39 | + local tmp="$TOOLS/jdk.tgz" |
| 40 | + echo "Downloading JDK from $url" |
| 41 | + curl -fL "$url" -o "$tmp" |
| 42 | + local top |
| 43 | + top=$(tar -tzf "$tmp" 2>/dev/null | head -1 | cut -d/ -f1 || true) |
| 44 | + tar -xzf "$tmp" -C "$TOOLS" |
| 45 | + rm "$tmp" |
| 46 | + local home="$TOOLS/$top" |
| 47 | + if [ -d "$home/Contents/Home" ]; then |
| 48 | + home="$home/Contents/Home" |
| 49 | + fi |
| 50 | + eval "$dest_var=\"$home\"" |
| 51 | +} |
| 52 | + |
| 53 | +if [ ! -x "${JAVA_HOME:-}/bin/java" ] || ! "${JAVA_HOME:-}/bin/java" -version 2>&1 | grep -q '1\.8'; then |
| 54 | + echo "Provisioning JDK 8 (this may take a while)..." |
| 55 | + install_jdk "$JDK8_URL" JAVA_HOME |
| 56 | +fi |
| 57 | + |
| 58 | +if [ ! -x "${JAVA_HOME_17:-}/bin/java" ] || ! "${JAVA_HOME_17:-}/bin/java" -version 2>&1 | grep -q '17\.0'; then |
| 59 | + echo "Provisioning JDK 17 (this may take a while)..." |
| 60 | + install_jdk "$JDK17_URL" JAVA_HOME_17 |
| 61 | +fi |
| 62 | + |
| 63 | +if ! [ -x "${MAVEN_HOME:-}/bin/mvn" ]; then |
| 64 | + echo "Downloading Maven from $MAVEN_URL" |
| 65 | + tmp="$TOOLS/maven.tgz" |
| 66 | + curl -fL "$MAVEN_URL" -o "$tmp" |
| 67 | + tar -xzf "$tmp" -C "$TOOLS" |
| 68 | + rm "$tmp" |
| 69 | + MAVEN_HOME="$TOOLS/apache-maven-3.9.6" |
| 70 | +fi |
| 71 | + |
| 72 | +cat > "$TOOLS/env.sh" <<ENV |
| 73 | +export JAVA_HOME="$JAVA_HOME" |
| 74 | +export JAVA_HOME_17="$JAVA_HOME_17" |
| 75 | +export MAVEN_HOME="$MAVEN_HOME" |
| 76 | +export PATH="\$JAVA_HOME/bin:\$MAVEN_HOME/bin:\$PATH" |
| 77 | +ENV |
| 78 | + |
| 79 | +source "$TOOLS/env.sh" |
| 80 | + |
| 81 | +"$JAVA_HOME/bin/java" -version |
| 82 | +"$JAVA_HOME_17/bin/java" -version |
| 83 | +"$MAVEN_HOME/bin/mvn" -version |
| 84 | + |
| 85 | +PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH" |
| 86 | +("$MAVEN_HOME/bin/mvn" -q -f maven/pom.xml install "$@") |
| 87 | + |
| 88 | +BUILD_CLIENT="$HOME/.codenameone/CodeNameOneBuildClient.jar" |
| 89 | +if [ ! -f "$BUILD_CLIENT" ]; then |
| 90 | + if ! "$MAVEN_HOME/bin/mvn" -q -f maven/pom.xml cn1:install-codenameone "$@"; then |
| 91 | + mkdir -p "$(dirname "$BUILD_CLIENT")" |
| 92 | + cp maven/CodeNameOneBuildClient.jar "$BUILD_CLIENT" || true |
| 93 | + fi |
| 94 | +fi |
| 95 | + |
| 96 | +if [ ! -d cn1-maven-archetypes ]; then |
| 97 | + git clone https://github.com/shannah/cn1-maven-archetypes |
| 98 | +fi |
| 99 | +(cd cn1-maven-archetypes && "$MAVEN_HOME/bin/mvn" -q -DskipTests -DskipITs install) |
0 commit comments