@@ -159,9 +159,7 @@ prepare_jdks::install_jdk_by_sdkman() {
159159 prepare_jdks::load_sdkman
160160
161161 local jdk_name_of_sdkman=" $1 " jdk_home_path
162- jdk_home_path=" $(
163- prepare_jdks::_get_jdk_path_from_jdk_name_of_sdkman " $jdk_name_of_sdkman "
164- ) "
162+ jdk_home_path=" $( prepare_jdks::_get_jdk_path_from_jdk_name_of_sdkman " $jdk_name_of_sdkman " ) "
165163
166164 # install jdk by sdkman
167165 if [ ! -d " $jdk_home_path " ]; then
@@ -170,7 +168,6 @@ prepare_jdks::install_jdk_by_sdkman() {
170168 fi
171169}
172170
173- # shellcheck disable=SC2120
174171prepare_jdks::_get_latest_java_version () {
175172 (( $# == 1 )) || cu::die " ${FUNCNAME[0]} requires exact 1 argument! But provided $# : $* "
176173
@@ -189,48 +186,90 @@ prepare_jdks::_get_latest_java_version() {
189186}
190187
191188prepare_jdks::_validate_java_home () {
192- local -r switch_target= " $1 "
189+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=
193190
194- [ -e " $JAVA_HOME " ] || cu::die " jdk $switch_target NOT existed: $JAVA_HOME "
195- [ -d " $JAVA_HOME " ] || cu::die " jdk $switch_target is NOT directory: $JAVA_HOME "
191+ local -r java_home=" $1 "
192+ if cu::is_blank_string " $java_home " ; then
193+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=" java home($java_home ) is BLANK"
194+ return 1
195+ fi
196+
197+ if [ ! -e " $java_home " ]; then
198+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=" java home($java_home ) is NOT existed"
199+ return 1
200+ fi
201+ if [ ! -d " $java_home " ]; then
202+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=" java home($java_home ) is NOT directory"
203+ return 1
204+ fi
196205
197- local java_cmd=" $JAVA_HOME /bin/java"
198- [ -f " $java_cmd " ] || cu::die " \$ JAVA_HOME/bin/java ($java_cmd ) of $switch_target is NOT found!"
199- [ -x " $java_cmd " ] || cu::die " \$ JAVA_HOME/bin/java ($java_cmd ) of $switch_target is NOT executable!"
206+ local java_cmd=" $java_home /bin/java"
207+ if [ ! -f " $java_cmd " ]; then
208+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=" \$ java_home/bin/java($java_cmd ) is NOT existed"
209+ return 1
210+ fi
211+ if [ ! -x " $java_cmd " ]; then
212+ _PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG=" \$ java_home/bin/java($java_cmd ) is NOT executable"
213+ return 1
214+ fi
200215}
201216
217+ # switch JAVA_HOME to target
218+ #
219+ # available switch target:
220+ # - version pattern, e.g.
221+ # - 11, 17
222+ # - 11.0, 11.0.14
223+ # - 11.0.14-ms
224+ # exact version of sdkman
225+ # - /path/to/java/home
226+ #
202227# usage:
203- # prepare_jdks::switch_to_jdk 11
204- # prepare_jdks::switch_to_jdk /path/to/java_home
228+ # prepare_jdks::switch_to_jdk 17
229+ # prepare_jdks::switch_to_jdk 11.0.14-ms
230+ # prepare_jdks::switch_to_jdk /path/to/java/home
231+ #
205232prepare_jdks::switch_to_jdk () {
206233 [ $# == 1 ] || cu::die " ${FUNCNAME[0]} requires exact 1 argument! But provided $# : $* "
207234
208235 local -r switch_target=" $1 "
209- [ -n " $switch_target " ] || cu::die " jdk $switch_target is blank "
236+ cu::is_blank_string " $switch_target " && cu::die " switch target( $switch_target ) is BLANK! "
210237
211- # 1. first check env var JDK11_HOME
238+ # 1. first check env var JDKx_HOME(e.g. JDK11_HOME)
212239 #
213- # set by java version, e.g.
240+ # aka. set by java version, e.g.
214241 # prepare_jdks::switch_to_jdk 11
215242 if cu::is_number_string " $switch_target " ; then
216- local java_home_var_name=" JDK${switch_target} _HOME"
217- if [ -d " ${! java_home_var_name:- } " ]; then
218- export JAVA_HOME=" ${! java_home_var_name:- } "
219- cu::yellow_echo " ${FUNCNAME[0]} $* : use \$ $java_home_var_name ($JAVA_HOME )"
220-
221- prepare_jdks::_validate_java_home " $switch_target "
222- return
243+ local jdk_home_var_name=" JDK${switch_target} _HOME"
244+
245+ # check env var JDKx_HOME is defined or not
246+ if [ -n " ${! jdk_home_var_name+defined} " ]; then
247+ local jdk_home=" ${! jdk_home_var_name:- } "
248+
249+ if prepare_jdks::_validate_java_home " $jdk_home " ; then
250+ export JAVA_HOME=" $jdk_home "
251+ cu::blue_echo " use \$ $jdk_home_var_name ($jdk_home ) as switch target $switch_target " >&2
252+ return
253+ else
254+ cu::yellow_echo " found \$ $jdk_home_var_name ($jdk_home ) for switch target $switch_target , but $_PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG , ignored!" >&2
255+ fi
223256 fi
224257 fi
225258
226- # 2. set by path of java installation
259+ # 2. then check switch is a directory or not
260+ #
261+ # aka. set by path of java installation, e.g.
262+ # prepare_jdks::switch_to_jdk /path/to/java/home
227263 if [ -d " $switch_target " ]; then
228- # set by java home path
229- export JAVA_HOME=" $switch_target "
230- cu::yellow_echo " ${FUNCNAME[0]} $* : use switch target $JAVA_HOME as java home directory"
264+ local jdk_home=" $switch_target "
231265
232- prepare_jdks::_validate_java_home " $switch_target "
233- return
266+ if prepare_jdks::_validate_java_home " $jdk_home " ; then
267+ export JAVA_HOME=" $switch_target "
268+ cu::blue_echo " switch target $switch_target is a existed directory, use it as \$ JAVA_HOME" >&2
269+ return
270+ else
271+ cu::yellow_echo " found switch target $switch_target is a existed directory, but $_PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG , ignored!" >&2
272+ fi
234273 fi
235274
236275 # 3. set by java version pattern of sdkman
@@ -242,29 +281,40 @@ prepare_jdks::switch_to_jdk() {
242281 prepare_jdks::_get_latest_java_version " $version_pattern "
243282 )
244283 # 3.2 check *remote* java versions of sdkman
245- if [ -z " ${ version} " ]; then
284+ if [ -z " $version " ]; then
246285 version=$(
247286 prepare_jdks::get_available_remote_java_versions_of_sdkman |
248287 prepare_jdks::_get_latest_java_version " $version_pattern "
249288 )
250289 fi
251290
252- [ -n " $version " ] || cu::die " fail to switch $switch_target "
291+ [ -n " $version " ] || cu::die " fail to find available java version in sdkman for switch $switch_target ! "
253292
254293 prepare_jdks::install_jdk_by_sdkman " $version "
255- JAVA_HOME=" $( prepare_jdks::_get_jdk_path_from_jdk_name_of_sdkman " $version " ) "
256- export JAVA_HOME
257- prepare_jdks::_validate_java_home " $switch_target "
294+
295+ local jdk_home
296+ jdk_home=" $( prepare_jdks::_get_jdk_path_from_jdk_name_of_sdkman " $version " ) "
297+
298+ if prepare_jdks::_validate_java_home " $jdk_home " ; then
299+ export JAVA_HOME=" $jdk_home "
300+ cu::blue_echo " use java version($version ) in sdkman($jdk_home ) as switch target $switch_target " >&2
301+ else
302+ cu::die " found available java version($version ) in sdkman($jdk_home ), but $_PREPARE_JDKS_VALIDATE_JAVA_HOME_ERR_MSG !"
303+ fi
258304}
259305
260- # prepare jdks:
306+ # prepare jdks
261307#
262308# usage:
263309# prepare_jdks::prepare_jdks <switch_target>...
264310#
265311# example:
266312# prepare_jdks::prepare_jdks 8 11 17
267313# prepare_jdks::prepare_jdks 11.0.14-ms 17.0.2-zulu
314+ # prepare_jdks::prepare_jdks 8 11.0.14-ms 18
315+ #
316+ # see: `prepare_jdks::switch_to_jdk`
317+ #
268318prepare_jdks::prepare_jdks () {
269319 (( $# > 0 )) || cu::die " ${FUNCNAME[0]} requires arguments! But no provided"
270320
0 commit comments