On Dec 14, 2009, at 8:07 AM, Ray Kiddy wrote: > On Dec 13, 2009, at 5:12 PM, Mike Swingler wrote: > >> On Dec 13, 2009, at 4:15 PM, Landon Fuller wrote: >> >>> On Dec 13, 2009, at 4:04 PM, Ray Kiddy wrote: >>> >>>> Is there any interest in packaging the OpenJDK 7 binaries into a real >>>> Mac OS X-compatible location? One can put them somewhere under /usr >>>> and make sure that /usr/bin/java points to the right version and this >>>> is good for server-ish things, but there may be reasons to install the >>>> OpenJDK 7 binaries under /System/Library/Frameworks/JavaVM.framework/ >>>> Versions/. There is a whole other kind of directory structure under >>>> there. I believe that if we want to have regular Cocoa applications >>>> that use java to use the OpenJDK 7 VM, it would have to be installed >>>> in the JavaVM.framework.... >>> >>> It's possible to register a standard VM (installed at any location) with >>> the Mac OS X Java tools such that you can select it as a preferred VM. >>> >>> I'm not sure if this is documented anywhere -- that's something Mike >>> Swingler (CC'd) probably has more information on. >> >> There is primitive support in Mac OS X 10.6 and Java for Mac OS X 10.5 >> Update 6 to detect 3rd party JVMs installed in >> ~/Library/Java/JavaVirtualMachines, and /Library/Java/JavaVirtualMachines. >> The JVM has to be a bundle, with a Contents/Home/bin directory, a primary >> executable (usually a symlink to libjava.jnilib or libjava.dylib). It also >> requires an Info.plist similar to the Apple-provided JVMs, but the current >> OpenJDK should only advertise itself as being able to run command-line, >> since Applets, Web Start, and double-clickable apps will not work correctly >> right now. >> >> If you could provide me with a link to built OpenJDK 7 you are using as a >> reference, I could provide a set of steps to assemble it into a JDK bundle >> that would be recognized by Java Preferences and the /usr/libexec/java_home >> machinery. > > Hey Mike - > > Good to hear from you. Thanks for the offer to help. Tell Francois and the > guys I said hey. > > So, there are recently updated instructions for building OpenJDK 7 on 10.5 on > a wiki page. See: > > http://wikis.sun.com/display/OpenJDK/Darwin9Build > > If you go to the BSDPort wiki page, there is a link (external to the wiki) to > instructions for building this on Snow Leopard. I have not done the build on > 10.6, so I cannot speak to it. But nobody has complained on the mailing list. > > http://wikis.sun.com/display/OpenJDK/BSDPort > > I noticed that, in my installed build products, the OpenJDK bin directory > does not contain everything, for example, that is in > /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands, so there > will be some mis-matches to deal with. > > If you want to see what is produced by the build of OpenJDK 7 on 10.5 at this > time, I did a "find -ls" in the products directory and that is at > http://www.wykiwyk.com/openjdk/openjdk7_ToC.txt.
So I've finally put together some ad-hoc instructions for creating and OpenJDK bundle that will be detectable by the /usr/bin and /usr/libexec/java_home commands: If you create the following directory: ~/Library/Java/JavaVirtualMachines/ and then create a new bundle directory structure of the form: OpenJDK 7.jdk/ Contents/ Info.plist MacOS/ libjava.dylib -> ../Home/jre/lib/i386/libjava.dylib Home/ <unpacked contents of SoyLatte or OpenJDK7 binary distribution> with the following Info.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleIdentifier</key> <string>com.example.OpenJDK</string> <key>CFBundleExecutable</key> <string>libjava.dylib</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>OpenJDK 1.7.0</string> <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> <string>1.0.0</string> <key>CFBundleSignature</key> <string>???</string> <key>CFBundleVersion</key> <string>1.0.0</string> <key>JavaVM</key> <dict> <key>JVMCapabilities</key> <array> <string>CommandLine</string> </array> <key>JVMPlatformVersion</key> <string>1.7</string> <key>JVMVersion</key> <string>1.7.0_00</string> </dict> </dict> </plist> You can then run: % `/usr/libexec/java_home -v 1.7`/bin/java -version And it will execute the new "1.7" version of Java. Cheers, Mike Swingler Java Runtime Engineer Apple Inc.