For use when you have multiple JVM providers (Apple & Oracle), you want to be able to switch between JDKs for each CLI
usejava () { local sel=$1.jdk if [ -x "/Library/Java/JavaVirtualMachines/jdk$sel/Contents/Home/bin/java" -a ! -x "/Library/Java/JavaVirtualMachines/$1/Contents/Home/bin/java" ] then sel=jdk$sel fi local base=/Library/Java/JavaVirtualMachines if [ -x "/System/Library/Java/JavaVirtualMachines/$sel/Contents/Home/bin/java" ] then base=/System/Library/Java/JavaVirtualMachines fi if [ -z "$1" -o ! -x "$base/$sel/Contents/Home/bin/java" ] then local prefix="Syntax: usejava " for i in /Library/Java/JavaVirtualMachines/* /System/Library/Java/JavaVirtualMachines/* do if [ -x "$i/Contents/Home/bin/java" ] then /bin/echo -n "$prefix$(basename $i | sed -e "s/^jdk//;s/\.jdk$//;")" prefix=" | " fi done /bin/echo "" else if [ -z "$JAVA_HOME" ] then export PATH=$base/$sel/Contents/Home/bin:$PATH else export PATH=$(echo $PATH|sed -e "s:$JAVA_HOME/bin:$base/$sel/Contents/Home/bin:g") fi export JAVA_HOME=$base/$sel/Contents/Home echo -n -e "\033]0;$(java -version 2>&1 | sed -e "s/.*\"\(.*\)\".*/Java \1/;q")\007" fi }
There is additional fun to be had, given that most Java based launchers that try to fix JAVA_HOME when not set will guess the Apple JVM path… so the following Java program can help
public class FixJavaHome { public static void main(String[] args) { String javaHome = System.getProperty("java.home"); if (javaHome.endsWith("/jre")) { javaHome = javaHome.substring(0,javaHome.length() - "/jre".length()); } System.out.println("export JAVA_HOME=\""+javaHome+'\"'); } }
Install like so
mkdir -p ~/bin/FixJavaHome && cd ~/bin/FixJavaHome && cat > FixJavaHome.java <<EOF public class FixJavaHome { public static void main(String[] args) { String javaHome = System.getProperty("java.home"); if (javaHome.endsWith("/jre")) { javaHome = javaHome.substring(0,javaHome.length() - "/jre".length()); } System.out.println("export JAVA_HOME=\""+javaHome+'\"'); } } EOF javac FixJavaHome.java cd -
If you add the following to your ~/.bash_profile
eval $(java -cp ~/bin/FixJavaHome/ FixJavaHome) echo -n -e "\033]0;$(java -version 2>&1 | sed -e "s/.*\"\(.*\)\".*/Java \1/;q")\007"
Then your JAVA_HOME
should be set up from the start, as well as your Terminal window title
No comments:
Post a Comment