As long as I’ve been using a Mac I always understood that if you needed to set $JAVA_HOME for any program.
On my machine this points to the 1.6 JDK:
1 2 |
$ls -alh `whereis java` lrwxr-xr-x 1 root wheel 74B 10 24 16:19 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java |
This was a bit surprising to me since I’ve actually got Java 7 installed on the machine as well so I’d assumed the symlink would have been changed:
1 2 3 4 |
$ java -version java version "1.7.0_09" Java(TM) SE Runtime Environment (build 1.7.0_09-b05) Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode) |
Andres and I were looking at something around this yesterday and wanted to set $JAVA_HOME to the location of the 1.7 JDK on the system if it had been installed.
We eventually came across the following article which explains that you can use the /usr/libexec/java_homecommand line tool to do this.
For example, if we want to find where the 1.7 JDK is we could run the following:
1 2 |
$ /usr/libexec/java_home -v 1.7 /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home |
And if we want 1.6 the following does the trick:
1 2 |
$ /usr/libexec/java_home -v 1.6 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home |
We can also list all the JVMs installed on the machine:
1 2 3 4 5 6 |
$ /usr/libexec/java_home -V Matching Java Virtual Machines (2): 1.6.0_35-b10-428, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home 1.6.0_35-b10-428, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home |