Installing OpenJDK 7 on OS X
Join the DZone community and get the full member experience.
Join For FreeLast week, I scanned an article and saw there was a Java 7 Webinar. At first, I thought Java 7 was released, but soon after realized it was a Developer Preview. Unfortunately, the download page doesn't have support for OS X. Since it took me a bit of work to figure out how to install OpenJDK 7 on OS X (I'm running Snow Leopard 10.6.7), I figured I'd write down how I did it.
I started off by downloading "OpenJDK 1.7 universal (32/64 bits) from Mac OS/X branch" from the openjdk-osx-build project's downloads (direct link). After downloading, I installed the dmg as normal.
I don't use Java Preferences to set my JDK, instead I use David Blevin's handy setjdk script. To make this script work with JDK 7 on OS X, I had to make one minor change. On line 40, I added "Contents" to the path for JAVA_HOME:
export JAVA_HOME=$vmdir/$ver/Contents/Home
From there, I had to setup some symlinks so everything would work as expected:
cd /System/Library/Java/JavaVirtualMachines/ sudo ln -s /Library/Java/JavaVirtualMachines/1.7.0.jdk
Lastly, I had my JAVA_HOME set to "/System/Library/Frameworks/JavaVM.framework/Home". I like the shorter (and seemingly more common) "/Library/Java/Home", so I set it back to that in my ~/.profile:
export JAVA_HOME=/Library/Java/Home
On my system, /Library/Java/Home had a symlink to /System/Library/Frameworks/JavaVM.framework/Home, so I changed it to the CurrentJDK that Java Preferences and setjdk use.
cd /Library/Java rm Home ln -s /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Contents/Home
Then I had to add a symlink for 1.7 in the Versions directory.
cd /System/Library/Frameworks/JavaVM.framework/Versions sudo ln -s /System/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents 1.7
After making these changes, I was able to switch to JDK 7 easily.
$ setjdk 1.7 Setting this terminal's JDK to 1.7 ... openjdk version "1.7.0-internal" OpenJDK Runtime Environment (build 1.7.0-internal-b00) OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)
I was also able to switch back to JDK 6.
$ setjdk 1.6 Setting this terminal's JDK to 1.6 ... java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
Maven Issues
Next, I tried using JDK 7 to build AppFuse. I ran into two issues when I tried to do this. The first was caused by the native2ascii plugin, which has been known to cause issues on non-Mac platforms. Adding the following profile seemed to solve the problem.
<profile> <activation> <jdk>1.7</jdk> </activation> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native2ascii-maven-plugin</artifactId> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.7.0</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> </dependencies> </plugin> </plugins> </build> </profile>
The next issue was with Enunciate and its maven-enunciate-cxf-plugin.
[INFO] ------------------------------------------------------------------------ [ERROR] FATAL ERROR [INFO] ------------------------------------------------------------------------ [INFO] com/sun/mirror/apt/AnnotationProcessorFactory com.sun.mirror.apt.AnnotationProcessorFactory [INFO] ------------------------------------------------------------------------ [INFO] Trace java.lang.NoClassDefFoundError: com/sun/mirror/apt/AnnotationProcessorFactory
It seemed like adding a profile that included tools.jar would solve this, but it doesn't. When I add the dependency directly to the plugin itself, I get the following error:
warning: The apt tool and its associated API are planned to be removed in the next major JDK release. These features have been superseded by javac and the standardized annotation processing API, javax.annotation.processing and javax.lang.model. Users are recommended to migrate to the annotation processing features of javac; see the javac man page for more information. [WARNING] Validation result has errors. error: [core] java.lang.StackTraceElement: A TypeDefinition must have a public no-arg constructor or be annotated with a factory method. 1 error [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------Hopefully this article helps you get started with Java 7 on OS X. If you have any additional tips, please leave a comment.
From http://raibledesigns.com/rd/entry/installing_openjdk_7_on_os
Opinions expressed by DZone contributors are their own.
Comments