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.


Reply via email to