Manage your Java environment
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

154 lines
4.5 KiB

#!/usr/bin/env bash
# Summary: Add JDK into jenv. A alias name will be generated by parsing "java -version"
# Usage: jenv add /path/to/java_home
set -e
[ -n "$JENV_DEBUG" ] && set -x
if [ "$#" -eq 0 ]; then
jenv-help --usage add >&2
exit 1
fi
# Provide jenv completions
if [ "$1" = "--complete" ]; then
echo "--skip-existing"
for d in ${!#}*; do
[[ -d "$d" ]] && echo "$d/"
done
exit
fi
version_added=false
# Display colorized information output
function cinfo() {
COLOR='\033[01;32m' # bold green
RESET='\033[00;00m' # normal white
echo -e "${COLOR}$*${RESET}"
}
# Display colorized warning output
function cwarn() {
COLOR='\033[01;31m' # bold red
RESET='\033[00;00m' # normal white
echo -e "${COLOR}$*${RESET}"
}
function add_alias_check(){
if [ -h "${JENV_ROOT}/versions/$1" ];
then
if [ "$JENV_SKIP" = false ]; then
cwarn "There is already a $1 JDK managed by jenv"
read -p "Do you want to override (type y to confirm)? " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]
then
rm -f "${JENV_ROOT}/versions/$1"
add_alias "$1"
fi
else
cinfo " $1 already present, skip installation"
fi
else
add_alias "$1"
fi
}
function add_alias(){
cd "${JENV_JAVAPATH}"
JENV_JAVAPATH="$PWD"
cd - 2>&1 > /dev/null
mkdir -p "${JENV_ROOT}/versions"
ln -s "${JENV_JAVAPATH}" "${JENV_ROOT}/versions/$1"
touch "${JENV_ROOT}/$1.time"
cinfo "$1 added"
version_added=true
}
JENV_JAVAPATH="$1"
JENV_VERSION_FILE=".jenv-version"
if [ "$#" -eq 2 ]; then
cwarn "Warning : jenv add alias path/to/java_home is deprecated."
cwarn "Please prefer to let jenv generate unique alias name by using"
echo ""
cwarn " $ jenv add path/to/java_home"
echo ""
JENV_JAVAPATH="$2"
JENV_ALIAS="$1"
add_alias_check $JENV_ALIAS
if $version_added ; then
$(jenv-rehash)
fi;
exit 0
fi;
if [ -f "${JENV_JAVAPATH}/bin/java" ]; then
if [ -z "${JENV_ALIAS}" ]; then
JAVA_VERSION_OUTPUT=`"${JENV_JAVAPATH}"/bin/java -version 2>&1`
JAVA_VERSION=`"${JENV_JAVAPATH}"/bin/java -version 2>&1 | grep 'version' | head -n 1 | cut -d\" -f 2 `
JAVA_VERSION=${JAVA_VERSION/_/.}
case "${JAVA_VERSION_OUTPUT}" in
*HotSpot*) JAVA_PROVIDER="oracle" ;;
*Zulu*) JAVA_PROVIDER="zulu" ;;
*Zing*) JAVA_PROVIDER="zulu_prime" ;;
*GraalVM*) JAVA_PROVIDER="graalvm" ;;
*Corretto*) JAVA_PROVIDER="corretto" ;;
*sapmachine*) JAVA_PROVIDER="sap" ;;
*SapMachine*) JAVA_PROVIDER="sap" ;;
*SAP*) JAVA_PROVIDER="sap" ;;
*Temurin*) JAVA_PROVIDER="temurin" ;;
*JBR*) JAVA_PROVIDER="jetbrains" ;;
*Kona*) JAVA_PROVIDER="kona" ;;
*OpenLogic*) JAVA_PROVIDER="openlogic" ;;
*Semeru\ Runtime\ Open*) JAVA_PROVIDER="semeru" ;;
*Semeru\ Runtime\ Certified*) JAVA_PROVIDER="semeru_certified" ;;
*Dragonwell*) JAVA_PROVIDER="dragonwell" ;;
*J9*) JAVA_PROVIDER="ibm" ;;
*OpenJDK*) JAVA_PROVIDER="openjdk" ;;
*) JAVA_PROVIDER="other" ;;
esac
fi;
if [ $JAVA_PROVIDER=="sap" ]; then
JAVA_PLATFORM="64"
else
if "${JENV_JAVAPATH}/bin/java" -version 2>&1 | grep -q "64-Bit"; then
JAVA_PLATFORM="64"
else
JAVA_PLATFORM="32"
fi;
fi;
JENV_ALIAS="${JAVA_PROVIDER}${JAVA_PLATFORM}-${JAVA_VERSION}"
JAVA_SHORTVERSION=$(sed 's/\([0-9]\.[0-9]\).*/\1/' <<< $JAVA_VERSION)
JAVA_SHORTESTVERSION=$(sed 's/\([0-9]\{1,\}\)\.\{0,1\}.*/\1/' <<< $JAVA_VERSION)
add_alias_check $JENV_ALIAS
add_alias_check $JAVA_VERSION
if [ "$JAVA_SHORTVERSION" != "$JAVA_VERSION" ]; then
add_alias_check $JAVA_SHORTVERSION
fi;
# don't add shortest version for jdk 1.x
if [ "$JAVA_SHORTESTVERSION" != 1 -a "$JAVA_SHORTESTVERSION" != "$JAVA_SHORTVERSION" ]; then
add_alias_check $JAVA_SHORTESTVERSION
fi
if $version_added ; then
$(jenv-rehash)
fi;
else
cwarn "${JENV_JAVAPATH} is not a valid path to java installation"
fi;