11#! /usr/bin/env bash
22# ##
3- # Prepare Codename One workspace by installing Maven, provisioning JDK 8 and JDK 17,
3+ # Prepare Codename One workspace by installing Maven, provisioning JDK 8, 11 and 17,
44# building core modules, and installing Maven archetypes.
55# ##
66set -euo pipefail
@@ -9,12 +9,21 @@ log() {
99 echo " [setup-workspace] $1 "
1010}
1111
12+ # Normalize TMPDIR so it has no trailing slash
13+ TMPDIR=" ${TMPDIR%/ } "
14+
1215# Place downloaded tools outside the repository so it isn't filled with binaries
1316DOWNLOAD_DIR=" ${TMPDIR:-/ tmp} /codenameone-tools"
1417mkdir -p " $DOWNLOAD_DIR "
1518ENV_DIR=" $DOWNLOAD_DIR /tools"
1619mkdir -p " $ENV_DIR "
1720
21+ # Reuse previously saved environment if present (so we can skip downloads)
22+ if [ -f " $ENV_DIR /env.sh" ]; then
23+ # shellcheck disable=SC1090
24+ source " $ENV_DIR /env.sh"
25+ fi
26+
1827JAVA_HOME=" ${JAVA_HOME:- } "
1928JAVA_HOME_17=" ${JAVA_HOME_17:- } "
2029MAVEN_HOME=" ${MAVEN_HOME:- } "
@@ -40,18 +49,33 @@ if [ "$os" = "mac" ] && [ "$arch" = "aarch64" ]; then
4049fi
4150
4251JDK8_URL=" https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u462-b08/OpenJDK8U-jdk_${arch_jdk8} _${os} _hotspot_8u462b08.tar.gz"
52+ JDK11_URL=" https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.28%2B6/OpenJDK11U-jdk_${arch} _${os} _hotspot_11.0.28_6.tar.gz"
4353JDK17_URL=" https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.16%2B8/OpenJDK17U-jdk_${arch} _${os} _hotspot_17.0.16_8.tar.gz"
4454MAVEN_URL=" https://archive.apache.org/dist/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz"
4555
4656install_jdk () {
4757 local url=" $1 " dest_var=" $2 "
48- local tmp=" $DOWNLOAD_DIR /jdk.tgz"
49- log " Downloading JDK from $url "
50- curl -fL " $url " -o " $tmp "
58+ local archive=" $DOWNLOAD_DIR /$( basename " $url " ) "
59+
60+ if [ -f " $archive " ]; then
61+ log " Using cached JDK archive $( basename " $archive " ) "
62+ else
63+ log " Downloading JDK from $url "
64+ curl -fL " $url " -o " $archive "
65+ fi
66+
67+ # Find top directory name inside the tarball
5168 local top
52- top=$( tar -tzf " $tmp " 2> /dev/null | head -1 | cut -d/ -f1 || true)
53- tar -xzf " $tmp " -C " $DOWNLOAD_DIR "
54- rm " $tmp "
69+ top=$( tar -tzf " $archive " 2> /dev/null | head -1 | cut -d/ -f1 || true)
70+
71+ # Extract only if target directory doesn't already exist
72+ if [ -n " $top " ] && [ -d " $DOWNLOAD_DIR /$top " ]; then
73+ log " JDK already extracted at $DOWNLOAD_DIR /$top "
74+ else
75+ log " Extracting JDK to $DOWNLOAD_DIR "
76+ tar -xzf " $archive " -C " $DOWNLOAD_DIR "
77+ fi
78+
5579 local home=" $DOWNLOAD_DIR /$top "
5680 if [ -d " $home /Contents/Home" ]; then
5781 home=" $home /Contents/Home"
@@ -61,43 +85,64 @@ install_jdk() {
6185
6286log " Ensuring JDK 8 is available"
6387if [ ! -x " ${JAVA_HOME:- } /bin/java" ] || ! " ${JAVA_HOME:- } /bin/java" -version 2>&1 | grep -q ' 8\.0' ; then
64- log " Provisioning JDK 8 (this may take a while) ..."
88+ log " Provisioning JDK 8..."
6589 install_jdk " $JDK8_URL " JAVA_HOME
6690else
6791 log " Using existing JDK 8 at $JAVA_HOME "
6892fi
6993
94+ log " Ensuring JDK 11 is available"
95+ if [ ! -x " ${JAVA_HOME_11:- } /bin/java" ] || ! " ${JAVA_HOME_11:- } /bin/java" -version 2>&1 | grep -q ' 11\.0' ; then
96+ log " Provisioning JDK 11..."
97+ install_jdk " $JDK11_URL " JAVA_HOME_11
98+ else
99+ log " Using existing JDK 11 at $JAVA_HOME_11 "
100+ fi
101+
70102log " Ensuring JDK 17 is available"
71103if [ ! -x " ${JAVA_HOME_17:- } /bin/java" ] || ! " ${JAVA_HOME_17:- } /bin/java" -version 2>&1 | grep -q ' 17\.0' ; then
72- log " Provisioning JDK 17 (this may take a while) ..."
104+ log " Provisioning JDK 17..."
73105 install_jdk " $JDK17_URL " JAVA_HOME_17
74106else
75107 log " Using existing JDK 17 at $JAVA_HOME_17 "
76108fi
77109
78110log " Ensuring Maven is available"
79111if ! [ -x " ${MAVEN_HOME:- } /bin/mvn" ]; then
80- tmp=" $DOWNLOAD_DIR /maven.tgz"
81- log " Downloading Maven from $MAVEN_URL "
82- curl -fL " $MAVEN_URL " -o " $tmp "
83- tar -xzf " $tmp " -C " $DOWNLOAD_DIR "
84- rm " $tmp "
85- MAVEN_HOME=" $DOWNLOAD_DIR /apache-maven-3.9.6"
112+ local mvn_archive=" $DOWNLOAD_DIR /$( basename " $MAVEN_URL " ) "
113+ if [ -f " $mvn_archive " ]; then
114+ log " Using cached Maven archive $( basename " $mvn_archive " ) "
115+ else
116+ log " Downloading Maven from $MAVEN_URL "
117+ curl -fL " $MAVEN_URL " -o " $mvn_archive "
118+ fi
119+ local mvn_top
120+ mvn_top=$( tar -tzf " $mvn_archive " 2> /dev/null | head -1 | cut -d/ -f1 || true)
121+ if [ -n " $mvn_top " ] && [ -d " $DOWNLOAD_DIR /$mvn_top " ]; then
122+ log " Maven already extracted at $DOWNLOAD_DIR /$mvn_top "
123+ else
124+ log " Extracting Maven to $DOWNLOAD_DIR "
125+ tar -xzf " $mvn_archive " -C " $DOWNLOAD_DIR "
126+ fi
127+ MAVEN_HOME=" $DOWNLOAD_DIR /$mvn_top "
86128else
87129 log " Using existing Maven at $MAVEN_HOME "
88130fi
89131
90132log " Writing environment to $ENV_DIR /env.sh"
91133cat > " $ENV_DIR /env.sh" << ENV
92134export JAVA_HOME="$JAVA_HOME "
135+ export JAVA_HOME_11="$JAVA_HOME_11 "
93136export JAVA_HOME_17="$JAVA_HOME_17 "
94137export MAVEN_HOME="$MAVEN_HOME "
95138export PATH="\$ JAVA_HOME/bin:\$ MAVEN_HOME/bin:\$ PATH"
96139ENV
97140
141+ # shellcheck disable=SC1090
98142source " $ENV_DIR /env.sh"
99143
100144log " JDK 8 version:" ; " $JAVA_HOME /bin/java" -version
145+ log " JDK 11 version:" ; " $JAVA_HOME_11 /bin/java" -version
101146log " JDK 17 version:" ; " $JAVA_HOME_17 /bin/java" -version
102147log " Maven version:" ; " $MAVEN_HOME /bin/mvn" -version
103148
@@ -120,4 +165,4 @@ log "Installing cn1-maven-archetypes"
120165if [ ! -d cn1-maven-archetypes ]; then
121166 git clone https://github.com/shannah/cn1-maven-archetypes
122167fi
123- (cd cn1-maven-archetypes && " $MAVEN_HOME /bin/mvn" -q -DskipTests -DskipITs=true -Dinvoker.skip=true install)
168+ (cd cn1-maven-archetypes && " $MAVEN_HOME /bin/mvn" -q -DskipTests -DskipITs=true -Dinvoker.skip=true install)
0 commit comments