欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Mac OS X Yosemite上编译OpenJDK 9 openjdkbuild编译openjdk9

程序员文章站 2024-03-18 16:30:28
...
      周末在家无事,想尝试自己动手编译下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!