在Mac OS X Yosemite上编译OpenJDK 9

      周末在家无事,想尝试自己动手编译下openjdk,(作为一个java程序员,这么多年还是第一次动手编译openjdk,想起来让人汗颜),中间各种曲折,好了,废话不多说,开始正题。
        首先我安装了mercurial,按照《深入理解java虚拟机》一书中的说法,可以从source bundle release页面下载打包好的源码,jdk7地址为:http://jdk7.java.net/source.html。但是我考虑到openjdk中有jdk9了,所以放弃尝试编译jdk7,决定尝试jdk9,可惜source bundle release页面并没有提供openjdk9的打包下载,于是只能选择使用mercurial来下载源码。
如果还没有安装mercurial的话,请自行下载(我使用如下方式安装:brew install mercurial)。好了,现在我就可以使用mercurial  clone一个jdk9的源码了。
在终端依次使用如下命令:
chmod 755 get_source.sh
./get_source.sh
就可以下载openjdk9的源码了。不知道是不是墙的原因,我家里的网一直下不下来,后来我申请了一个免费一年的亚马逊云服务器(美国的)来下载,那速度,真是不用多说了。(如果大家也有兴趣的话,可以自行申请,网上关于这方面的文章不少,请google)
   我也从网上查了些资料,都说编译是需要X11,所以我也装了一个 XQuartz,这个最新版的是2.7.7,我推荐安装2.5.5,因为最新版的好像不起作用,具体可以参考 Building OpenJDK 8 on Mac OS X Mavericks(这文章还是很具有参考价值的)。除此之外还需要下载一个xcode,我本地的版本是Version 6.1.1(Yosemite中不集成xcode,所以需要下载,建议版本5以上)。
     好了,基本的工具都已准备完毕,可以开始编译了,我直接build fastdebug版本的。
jdk9-dev quinn$ chmod 755 configure 

jdk9-dev quinn$ ./configure --enable-debug --with-target-bits=64

得到结果
A new configuration has been successfully created in
/Users/quinn/study/jdk9-dev/build/macosx-x86_64-normal-server-fastdebug
using configure arguments '--enable-option-checking=fatal --enable-debug --with-target-bits=64'.
说明成功了,下面我们继续make。
jdk9-dev quinn$ make
Building OpenJDK for target 'default' in configuration 'macosx-x86_64-normal-server-fastdebug'

Compiling 8 files for BUILD_TOOLS_LANGTOOLS
警告: [options] 未与 -source 1.6 一起设置引导类路径
1 个警告
警告: [options] 未与 -source 1.6 一起设置引导类路径
1 个警告
Parsing 1 properties into enum-like class for jdk.compiler
Compiling 20 properties into resource bundles for jdk.compiler
Compiling 5 properties into resource bundles for jdk.dev
Compiling 10 properties into resource bundles for jdk.javadoc
Compiling 820 files for BUILD_INTERIM_LANGTOOLS
[...]
虽然过程中历经曲折(中间会有很多警告),但我们依然得到最好的结果
----- Build times -------
Start 2015-01-19 18:00:21
End   2015-01-19 18:13:52

00:13:31 TOTAL
-------------------------
好,大功告成了!
我们来简单测试一下,打开build目录
jdk9-dev quinn$ cd build/macosx-x86_64-normal-server-fastdebug/
macosx-x86_64-normal-server-fastdebug quinn$ ls
Makefile            build.log    compare.shconfig.status*  hotspot-spec.gmk  make-supportsupport/
bootcycle-spec.gmk  buildtools/  config.log   hotspot/        jdk/              spec.gmk
macosx-x86_64-normal-server-fastdebug quinn$ cd jdk/bin/
bin quinn$ ls
appletviewerjava*     javap*     jdeps*   jjs*         jsadebugdkeytool*       policytool*   schemagen*   unpack200*
idlj*          javac*    jcmd*      jhat*    jmap*        jstack*     native2asciirmic*         serialver*   wsgen*
jar*           javadocjconsolejimagejps*         jstat*      orbd*          rmid*         servertoolwsimport*
jarsigner*     javah*    jdb*       jinfo*   jrunscriptjstatd*     pack200*       rmiregistrytnameserv*   xjc*
bin quinn$ ./java -version
openjdk version "1.9.0-internal-fastdebug"
OpenJDK Runtime Environment (build 1.9.0-internal-fastdebug-quinn_2015_01_19_17_58-b00)
OpenJDK 64-Bit Server VM (build 1.9.0-internal-fastdebug-quinn_2015_01_19_17_58-b00, mixed mode)
可以看到已经成功了,还带自己机器名哦。
 
        最后,说下我遇到的问题吧,最开始,由于在本机一直都无法clone下openjdk9的源代码,我就先尝试了编译openjdk8,参考了上面提到的那篇文章,最开始还算顺利,但后来我遇到的问题就和文章中提到的不一致了,在网上遍寻解决方案后无果,最后发现了openjdk的往来 邮件,我这里摘抄一行:
The short answer is that building jdk8 on Yosemite is not supported.
原来人家根本不支持jdk8在Yosemite上编译。后来我又在openjdk的wiki中找到了各个版本在不同平台的支持情况,最后才选择了编译openjdk9。再来说下上面那篇文章 Building OpenJDK 8 on Mac OS X Mavericks,我一开始就是按照这篇文章来操作的,在编译openjdk8的时候前面的几个问题基本跟这个一样,一直到saproc_make_fobjc_exceptions_flag_fix.patch之后才出现问题。后来在编译openjdk9的时候,由于没有还原环境,主要是gcc和g++(文章中使用apple-gcc42),中间还出现了一些问题,出现问题的原因 与此类似,最后还是选择xcode中的clong来编译。
     好了,最后祝大家在编译的过程中good luck!

猜你喜欢

转载自quinn-zhuang.iteye.com/blog/2177397
今日推荐