I wanted to figure out the Java installation on OSX so that I can easily switch between JDK 6,7 and 8.
I got my answer from this post http://stackoverflow.com/questions/15120745/need-help-understanding-oracles-java-on-mac
In summary
When we install Java using a dmg it goes here /Library/Java/JavaVirtualMachines/
This command is handy to figure this out
java_home man
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html
Let's see how this gets connected with java command.
I got my answer from this post http://stackoverflow.com/questions/15120745/need-help-understanding-oracles-java-on-mac
In summary
When we install Java using a dmg it goes here /Library/Java/JavaVirtualMachines/
This command is handy to figure this out
$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
java_home man
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html
Let's see how this gets connected with java command.
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
$ which java
/usr/bin/java
$ ls -al /usr/bin/java
lrwxr-xr-x 1 root wheel 74 Apr 2 2014 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
</pre >
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java is actually a proxy to actual installation of java!
Let's see where does this proxy end up
$ sudo dtrace -n 'syscall::posix_spawn:entry { trace(copyinstr(arg1)); }' -c "java -version"
dtrace: description 'syscall::posix_spawn:entry ' matched 1 probe
dtrace: pid 19903 has exited
CPU ID FUNCTION:NAME
0 638 posix_spawn:entry /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/bin/java
from the post
A combination of factors are considered. JAVA_HOME is used if set (try JAVA_HOME=/tmp java
). If JAVA_HOME is not set then the list of all virtual machines on the system is discovered. The JAVA_VERSION and JAVA_ARCH environment variables are used, if set, to filter the list of virtual machines to a particular version and supported architecture. The resulting list is then sorted by architecture (preferring 64-bit over 32-bit) and version (newer is better), and the best match is returned.
The proxy is intelligent enough to find the Java installation and java will work for you. But what if you want to switch between multiple JDKs. Simple, pass the instruction through JAVA_HOME. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
No need to add to the PATH :)
I love this proxy concept. An Apple A Day, Keeps lot of worries Away
No comments:
Post a Comment