Created
September 22, 2011 14:38
-
-
Save headius/1234935 to your computer and use it in GitHub Desktop.
OS X 'pickjdk' command with single-command selection and updated JDK location
This file contains hidden or 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 | |
} |
Very nice...that's a bit more elegant than scanning a dir. I'll try to update.
It would also make it possible to choose 1.6 if you need to.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
On Mac OS X you can get a list of the installed JVM's with
/usr/libexec/java_home -V