343343# @return the Java version number as displayed in 'java -version' command
344344# ###############################################################################
345345function get_java_version_from_cmd() {
346- # second sed command strips " and -ea from the version string
347- echo $( " $1 " -version 2>&1 | awk ' /version/{print $NF}' | sed -E ' s/"//g;s/-ea//g' )
346+ # second sed command strips " and -ea from the version string
347+ echo $( " $1 " -version 2>&1 | awk ' /version/{print $NF}' | sed -E ' s/"//g;s/-ea//g' )
348348}
349349
350350
@@ -356,7 +356,7 @@ function get_java_version_from_cmd() {
356356# @return the major version (e.g. '7', '8' or '9', etc.)
357357# ###############################################################################
358358function extract_java_major_version() {
359- echo $( echo " $1 " | sed -E ' s/^1\.//;s/^([0-9]+)(-ea|(\.[0-9_.]{1,7})?)[+*]?$/\1/' )
359+ echo $( echo " $1 " | sed -E ' s/^1\.//;s/^([0-9]+)(-ea|(\.[0-9_.]{1,7})?)[+*]?$/\1/' )
360360}
361361
362362
@@ -368,12 +368,12 @@ function extract_java_major_version() {
368368# @return an 8 digit numeral ('1.8.0_45'->'08000045'; '9.1.13'->'09001013')
369369# ###############################################################################
370370function get_comparable_java_version() {
371- # cleaning: 1) remove leading '1.'; 2) remove 'a-Z' and '-*+' (e.g. '-ea'); 3) replace '_' with '.'
372- local cleaned=$( echo " $1 " | sed -E ' s/^1\.//g;s/[a-zA-Z+*\-]//g;s/_/./g' )
373- # splitting at '.' into an array
374- local arr=( ${cleaned// ./ } )
375- # echo a string with left padded version numbers
376- echo " $( printf ' %02s' ${arr[0]} ) $( printf ' %03s' ${arr[1]} ) $( printf ' %03s' ${arr[2]} ) "
371+ # cleaning: 1) remove leading '1.'; 2) remove 'a-Z' and '-*+' (e.g. '-ea'); 3) replace '_' with '.'
372+ local cleaned=$( echo " $1 " | sed -E ' s/^1\.//g;s/[a-zA-Z+*\-]//g;s/_/./g' )
373+ # splitting at '.' into an array
374+ local arr=( ${cleaned// ./ } )
375+ # echo a string with left padded version numbers
376+ echo " $( printf ' %02s' ${arr[0]} ) $( printf ' %03s' ${arr[1]} ) $( printf ' %03s' ${arr[2]} ) "
377377}
378378
379379
@@ -412,15 +412,15 @@ function get_comparable_java_version() {
412412# @return boolean exit code: 0 (is valid), 1 (is not valid)
413413# ###############################################################################
414414function is_valid_requirement_pattern() {
415- local java_req=$1
416- java8pattern=' 1\.[4-8](\.0)?(\.0_[0-9]+)?[*+]?'
417- java9pattern=' (9|1[0-9])(-ea|[*+]|(\.[0-9]+){1,2}[*+]?)?'
418- # test matches either old Java versioning scheme (up to 1.8) or new scheme (starting with 9)
419- if [[ ${java_req} =~ ^(${java8pattern} | ${java9pattern} )$ ]]; then
420- return 0
421- else
422- return 1
423- fi
415+ local java_req=$1
416+ java8pattern=' 1\.[4-8](\.0)?(\.0_[0-9]+)?[*+]?'
417+ java9pattern=' (9|1[0-9])(-ea|[*+]|(\.[0-9]+){1,2}[*+]?)?'
418+ # test matches either old Java versioning scheme (up to 1.8) or new scheme (starting with 9)
419+ if [[ ${java_req} =~ ^(${java8pattern} | ${java9pattern} )$ ]]; then
420+ return 0
421+ else
422+ return 1
423+ fi
424424}
425425
426426
@@ -433,13 +433,13 @@ function is_valid_requirement_pattern() {
433433# @return a right-padded semver version number (e.g. 9.0.0, 10.0.0)
434434# ###############################################################################
435435function pad_short_version_to_semver() {
436- local java_ver=$1
437- if [[ ${java_ver} =~ ^[0-9]+$ ]] ; then
438- java_ver=" ${java_ver} .0.0"
439- elif [[ ${java_ver} =~ ^[0-9]+\. 0$ ]] ; then
440- java_ver=" ${java_ver} .0"
441- fi
442- echo ${java_ver}
436+ local java_ver=$1
437+ if [[ ${java_ver} =~ ^[0-9]+$ ]] ; then
438+ java_ver=" ${java_ver} .0.0"
439+ elif [[ ${java_ver} =~ ^[0-9]+\. 0$ ]] ; then
440+ java_ver=" ${java_ver} .0"
441+ fi
442+ echo ${java_ver}
443443}
444444
445445
@@ -456,48 +456,48 @@ function pad_short_version_to_semver() {
456456# @return an exit code: 0 (satiesfies), 1 (does not), 2 (invalid requirement)
457457# ###############################################################################
458458function does_java_version_satisfy_requirement() {
459- # update short versions (9, 9.1, 10) to semver form (9.0.0, 9.1.0, 10.0.0)
460- local java_ver=$( pad_short_version_to_semver $1 )
461- local java_req=$2
462-
463- if ! is_valid_requirement_pattern ${java_req} ; then
464- return 2
465-
466- # requirement ends with * modifier
467- # e.g. 1.8*, 9*, 9.1*, 9.2.4*, 10*, 10.1*, 10.1.35*
468- elif [[ ${java_req} == * \* ]] ; then
469- # use the * modifier from the requirement string as wildcard for a 'starts with' comparison
470- if [[ ${java_ver} == ${java_req} ]] ; then
471- return 0
472- else
473- return 1
474- fi
475-
476- # requirement ends with + modifier
477- # e.g. 1.8+, 9+, 9.1+, 9.2.4+, 10+, 10.1+, 10.1.35+
478- elif [[ ${java_req} == * + ]] ; then
479- local java_req_num=$( get_comparable_java_version ${java_req} )
480- local java_ver_num=$( get_comparable_java_version ${java_ver} )
481- if [ ${java_ver_num} -ge ${java_req_num} ] ; then
482- return 0
483- else
484- return 1
485- fi
486-
487- # matches standard requirements without modifier
488- # e.g. 1.8, 9, 9.1, 9.2.4, 10, 10.1, 10.1.35
489- else
490- # java version equals requirement string (1.8.0_45 == 1.8.0.45)
491- if [ ${java_ver} == ${java_req} ] ; then
492- return 0
493- # java version starts with requirement string (1.8.0_45 == 1.8)
494- elif [[ ${java_ver} == ${java_req} * ]] ; then
495- return 0
496- else
497- return 1
498- fi
499-
500- fi
459+ # update short versions (9, 9.1, 10) to semver form (9.0.0, 9.1.0, 10.0.0)
460+ local java_ver=$( pad_short_version_to_semver $1 )
461+ local java_req=$2
462+
463+ if ! is_valid_requirement_pattern ${java_req} ; then
464+ return 2
465+
466+ # requirement ends with * modifier
467+ # e.g. 1.8*, 9*, 9.1*, 9.2.4*, 10*, 10.1*, 10.1.35*
468+ elif [[ ${java_req} == * \* ]] ; then
469+ # use the * modifier from the requirement string as wildcard for a 'starts with' comparison
470+ if [[ ${java_ver} == ${java_req} ]] ; then
471+ return 0
472+ else
473+ return 1
474+ fi
475+
476+ # requirement ends with + modifier
477+ # e.g. 1.8+, 9+, 9.1+, 9.2.4+, 10+, 10.1+, 10.1.35+
478+ elif [[ ${java_req} == * + ]] ; then
479+ local java_req_num=$( get_comparable_java_version ${java_req} )
480+ local java_ver_num=$( get_comparable_java_version ${java_ver} )
481+ if [ ${java_ver_num} -ge ${java_req_num} ] ; then
482+ return 0
483+ else
484+ return 1
485+ fi
486+
487+ # matches standard requirements without modifier
488+ # e.g. 1.8, 9, 9.1, 9.2.4, 10, 10.1, 10.1.35
489+ else
490+ # java version equals requirement string (1.8.0_45 == 1.8.0.45)
491+ if [ ${java_ver} == ${java_req} ] ; then
492+ return 0
493+ # java version starts with requirement string (1.8.0_45 == 1.8)
494+ elif [[ ${java_ver} == ${java_req} * ]] ; then
495+ return 0
496+ else
497+ return 1
498+ fi
499+
500+ fi
501501}
502502
503503
0 commit comments