Switching JDKs in MacOSX
Bash functions written by Shawn Erickson for switching JDKs, still works in 2009!
# ***********************************************************************************
# Written by Shawn Erickson - shawn at freetimesw.com
#
# Feel free to use as you like but at your own risk :)
#
# Last Update: 2005y 08m 25d, 1:15 PM PST
#
# The following functions are meant for use with bash shell which is currently the
# default on Mac OS X 10.4 (starting with 10.3 IIRC) unless otherwise configured.
#
# If your shell is already set to use BASH then skip to install steps below.
# If you don't know what shell you are using by default then open a terminal
# window and type "echo $SHELL" and hit return. If it lists "/bin/bash" then
# you are using bash by default. If not you have the option of changing the
# default in terminal, globally for your user, or on demand.
#
# ***********************************************************************************
### Java Environment Functions ###
J_VERSIONS_DIRECTORY="/System/Library/Frameworks/JavaVM.framework/Versions"
J_COMMANDS_SUBPATH="Commands"
J_HOME_SUBPATH="Home"
function availableJVMs()
{
ls -1 $J_VERSIONS_DIRECTORY | grep ^[0-9].[0-9]
}
function listJava()
{
local jvms=$(availableJVMs)
echo "Available JVMs: "$jvms
echo "Current Java:"
java -version
}
function setJava()
{
local target_jvm=""
local jvms=$(availableJVMs)
# Validate that the user requested an available JVM present on the system
for jvm in $jvms ; do
if [ "$jvm" == "$@" ]; then
target_jvm=$@
fi
done
if [ "$target_jvm" == "" ]; then
echo "Unsupported Java version requested"
return;
fi
# If we get here the user asked for a valid JVM, so configure it
echo "Configuring Shell Environment for Java "$@
# First unset any current set java, back to default before doing configuration
_unsetJava
# Generate the paths needed for the JVM requested
local jcmd="${J_VERSIONS_DIRECTORY}/$@/${J_COMMANDS_SUBPATH}"
local jhome="${J_VERSIONS_DIRECTORY}/$@/${J_HOME_SUBPATH}"
# We save the original path so we can toggle back if unset
ORIGINAL_PATH="$PATH"
PATH="$jcmd:${PATH}"
# We save the original JAVA_HOME so we can toggle back if unset
ORIGINAL_JAVA_HOME="$JAVA_HOME"
JAVA_HOME="$jhome"
# Update command prompt mode tag to note JVM setting
CURRENT_MODE_STRING="J$@"
echo "Current Java:"
java -version
}
function _unsetJava()
{
if [ "$CURRENT_MODE_STRING" != "" ]; then
PATH="$ORIGINAL_PATH"
JAVA_HOME="$ORIGINAL_JAVA_HOME"
CURRENT_MODE_STRING=""
fi
}
function unsetJava()
{
echo "Configuring Shell Environment for default Java"
_unsetJava
echo "Current Java:"
java -version
}
