天天看点

在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的源码了。 在终端依次使用如下命令: hg clone http://hg.openjdk.java.net/jdk9/dev 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.sh*  config.status*  hotspot-spec.gmk  make-support/  support/ bootcycle-spec.gmk  buildtools/  config.log   hotspot/        jdk/              spec.gmk macosx-x86_64-normal-server-fastdebug quinn$ cd jdk/bin/ bin quinn$ ls appletviewer*  java*     javap*     jdeps*   jjs*         jsadebugd*  keytool*       policytool*   schemagen*   unpack200*

idlj*          javac*    jcmd*      jhat*    jmap*        jstack*     native2ascii*  rmic*         serialver*   wsgen*

jar*           javadoc*  jconsole*  jimage*  jps*         jstat*      orbd*          rmid*         servertool*  wsimport* jarsigner*     javah*    jdb*       jinfo*   jrunscript*  jstatd*     pack200*       rmiregistry*  tnameserv*   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!

继续阅读