You can have multiple JDK versions installed side by side but only one "public" JRE under ugin (which will correspond to the latest installed JDK or a later version if it has been auto-updated since).Īs explained by bdash, the commands under /usr/bin are stubs that delegate to whichever JDK/JRE is pointed to by the JAVA_HOME environment variable, or if that is not set then they will pick the most appropriate Java to run. The JDK (the one you download from ) installs by creating a directory under /Library/Java/JavaVirtualMachines, and it's up to you to update this yourself. the one that is used by the web browser plugin to run applets and Java Web Start) installs itself in /Library/Internet Plug-Ins/ugin/Contents/Home, and it is this one that any automatic updates will affect. 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 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. If JAVA_HOME is not set then the list of all virtual machines on the system is discovered. JAVA_HOME is used if set (try JAVA_HOME=/tmp java). * A combination of factors are considered when determining which Java VM should be used. The stub binaries also have another benefit: when they detect that no Java VM is installed they will prompt the user to install one.Īs for the CurrentJDK symlink, as best as I can tell this for sake of backwards-compatibility with the past when Apple was the only source of the JVM on OS X. In my case the stub application has found Apple's Java 1.6 runtime in /System/Library/Java/JavaVirtualMachines/1.6.0.jdk and is invoking that version of the java command. The given dtrace invocation prints out the path argument to posix_spawn when it is called by java -version. You can see this in action by using dtrace: sudo dtrace -n 'syscall::posix_spawn:entry ' -c "/usr/bin/java -version"ĭtrace: description 'syscall::posix_spawn:entry ' matched 1 probeĨ 619 posix_spawn:entry /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java This is why all of the binaries within /System/Library/Frameworks/amework/Versions/Current/Commands are almost identical in size, despite the fact that you'd expect them to be implementing quite different functionality. The binaries within that directory are stub applications that determine which Java VM to use*, and then exec the corresponding real binary within that VM version. You've been misled!Īs you've noted, the Java commands in /usr/bin are symlinks to binaries in /System/Library/Frameworks/amework/Versions/Current/Commands. Oracle's JVM is only installed in one location. I've looked on Oracle's website but nothing there clears anything up. So does this mean Oracle installed Java 7 in two different places? If so, why? Which am I supposed to use? And why do some things still point to Java 6 (CurrentJDK). It appears there is a Java 7 installed here: /System/Library/Frameworks/amework/Versions/Aīut there is also a Java 7 installed here: /Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdkįinding 'java' in both and printing out the version yields the same version and build (java version "1.7.0_15"), however, when hashing the files they are different. Now this is all really confusing but this isn't even my question yet. Tracing this back to '/System/Library/Frameworks/amework/Versions' everything either points to 'Current' or 'CurrentJDK', the former being a link to 'A' (which is Oracle's Java 7, from what I can tell, not sure why it is 'A') and the latter being a link to Apple's Java 6 in '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk'. It updated my /usr/bin/java (and related files) to point here: /System/Library/Frameworks/amework/Versions/Current/Commands/java So now I'm using OS X 10.8 and I need to install Java 7 so I just got Oracle's Update 15 in DMG form and ran the installer. I've been using Java on OS X for many, many years and recently when Apple stopped including Java by default I let the OS go and install it for me (Apple's variety, of course).
0 Comments
Leave a Reply. |