Skip to content

Commit 84be83b

Browse files
committed
refactor prepare_jdks::switch_to_jdk: ignore when env var JDKx_HOME and switch target directory check failed, instead die
1 parent 8a5267b commit 84be83b

File tree

1 file changed

+84
-34
lines changed

1 file changed

+84
-34
lines changed

lib/prepare_jdks.sh

Lines changed: 84 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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
174171
prepare_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

191188
prepare_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+
#
205232
prepare_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+
#
268318
prepare_jdks::prepare_jdks() {
269319
(($# > 0)) || cu::die "${FUNCNAME[0]} requires arguments! But no provided"
270320

0 commit comments

Comments
 (0)