Created
May 20, 2013 18:55
-
-
Save faraazkhan/5614562 to your computer and use it in GitHub Desktop.
Pick your JDK on a mac
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Provides a function that allows you to choose a JDK. Just set the environment | |
# variable JDKS_ROOT to the directory containing multiple versions of the JDK | |
# and the function will prompt you to select one. JAVA_HOME and PATH will be cleaned | |
# up and set appropriately. | |
_macosx() | |
{ | |
if [ $(uname -s) = Darwin ]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
JDKS_ROOT= | |
if _macosx; then | |
JDKS_ROOT=/Library/Java/JavaVirtualMachines | |
fi | |
pickjdk() | |
{ | |
if [ -z "$JDKS_ROOT" ]; then | |
return 1 | |
fi | |
declare -a JDKS | |
local n=1 jdk total_jdks choice=0 currjdk=$JAVA_HOME explicit_jdk | |
for jdk in $JDKS_ROOT/*; do | |
if [ -d $jdk ]; then | |
JDKNAMES[$n]="$(basename $jdk)" | |
if _macosx; then | |
jdk=$jdk/Contents/Home | |
fi | |
if [ -z "$1" ]; then | |
echo -n " $n) ${JDKNAMES[$n]}" | |
if [ $jdk = "$currjdk" ]; then | |
echo " < CURRENT" | |
else | |
echo | |
fi | |
fi | |
JDKS[$n]=$jdk | |
total_jdks=$n | |
n=$[ $n + 1 ] | |
fi | |
done | |
if [ -z "$1" ]; then | |
echo " $n) None" | |
fi | |
JDKS[$n]=None | |
total_jdks=$n | |
if [ $total_jdks -gt 1 ]; then | |
if [ -z "$1" ]; then | |
while [ -z "${JDKS[$choice]}" ]; do | |
echo -n "Choose one of the above [1-$total_jdks]: " | |
read choice | |
done | |
else | |
choice=$1 | |
fi | |
fi | |
if [ -z "$currjdk" ]; then | |
currjdk=$(dirname $(dirname $(type -path java))) | |
fi | |
if [ ${JDKS[$choice]} != None ]; then | |
export JAVA_HOME=${JDKS[$choice]} | |
else | |
unset JAVA_HOME | |
fi | |
explicit_jdk= | |
for jdk in ${JDKS[*]}; do | |
if [ "$currjdk" = "$jdk" ]; then | |
explicit_jdk=$jdk | |
break | |
fi | |
done | |
if [ "$explicit_jdk" ]; then | |
if [ -z "$JAVA_HOME" ]; then | |
PATH=$(echo $PATH | sed "s|$explicit_jdk/bin:*||g") | |
else | |
PATH=$(echo $PATH | sed "s|$explicit_jdk|$JAVA_HOME|g") | |
fi | |
elif [ "$JAVA_HOME" ]; then | |
PATH="$JAVA_HOME/bin:$PATH" | |
fi | |
echo "New JDK: ${JDKNAMES[$choice]}" | |
hash -r | |
unset JDKS | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment