周末在家无事,想尝试自己动手编译下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 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
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/
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*
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 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!
相关推荐
用transmac恢复到U盘即可安装
OS X Yosemite 10.10全系列内核文件,Extra,org.chameleon.Boot,,Kernels
JXA-Cookbook, 在 Mac OS X Yosemite 中,用于自动化的JavaScript cookbook 用于自动化的 JavaScript自动化的JavaScript是 Mac OS X Yosemite 中的新东西。 它允许你使用JavaScript语言控制应用程序。 多么精彩 !...
mac os x yosemite出现王玉bug怎么办?.docx
If you have a Mac, you might not even recognize OS X Yosemite. Apple redesigned its look, enhanced it with 200 new features, integrated it with the iPhone in clever ways but once again forgot to ...
OS X Yosemite怎么样?.docx
在该年之后的2001年9月25日,Mac OS X 10.1 Puma推出,增加了系统的效能和提供不存在的特色,像是 DVD播放。由于 10.0 的不好名声,苹果为 10.0 的使用者推出免费的升级 CD,此为对于只有运行 Mac OS 9 的人推出 $...
Yosemite 是 Google Chrome 的主题,以匹配 Mac OS X 10.10 'Yosemite' 的用户界面/设计。 它将浏览器主题化以与 OS X 10.10 的其余部分融为一体。 这个主题是为 Mac OS X 10.10 设计的,看起来最好,但也适用于较...
签名ipa的时候Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!导致重签名失败。
os x yosemite10.10使用技巧大全.docx
os x yosemite wifi断线怎么办?.docx
Os x yosemite beta 兑换码怎么获得.docx
OS X Yosemite 10.10.3 Beta3开放.docx
苹果os x yosemite beta兑换码获得方法.docx
如何激活OS X Yosemite的深色模式.docx
OS X Yosemite- 设置 iCloud 钥匙串.docx
OS X Yosemite 10.10正式版新功能.docx
在VMware虚拟机中安装OS X Yosemite后发现非常卡顿,不得不分配更多地内存和CPU处理器性能来让他能让它顺滑的运行和使用。 在VMware中虽然分配了更多地内存和处理器性能,但是问题依旧,VMware的图形性能还是不够...
如何关闭OS X Yosemite的自动纠正功能.docx