首先,下载源码,是通过mercurial 下载 具体下载命令可以参看 这里
通过hg clone 下载
我下载的版本是openjdk-7u75-src-b13,这个版本可能不是一个稳定版本 但只要能通过编译,测试无误就可以使用,当然之其中也有一些代码修改,和业务相关的
之后是环境准备
freetype要高于2.2 版本
打包用的JDK 我用的版本是 jdk1.7.0_72
ant 用的版本是1.9.4 大于1.7.0即可
其他的工具 可以视打包环境打包过程会自动提示
打包机:
Linux 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
过程中遇到的问题:
在写自己的makefile的时候 写错了jdk的版本 足足折腾了两天 真的很奇葩啊,
makefile里 JAVA_HOME = $(shell echo /usr/local/jdk1.7.0_72) 这里的jdk漏掉了,直接反映的结果在 make sanity的时候报ant的版本低于1.7.1 这个真的很囧啊后来跟进去看才发现
在openjdk/jdk/make/common/shared/Sanity.gmk 文件中定义的获取命令是这样的
_ANT_VER:=$(shell $(ANT) -version 2>&1 )
ANT_VER:=$(call GetVersion,"$(_ANT_VER)")
在查找$(ANT)值 和 GetVersion的具体实现后发现
$(ANT) = PTS=-Djava.io.tmpdir=/data0/zhangyun/_build/openjdk/build/linux-amd64/tmp JAVA_HOME=/usr/local/jdk1.7.0_72 /usr/local/apache-ant-1.9.4/bin/ant -version
GetVersion具体方法在openjdk/jdk/make/common/shared/Defs.gmk
# Given a line of text, get the version number from it
define GetVersion
$(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' )
endef
开始没有发现这里的少了东西,直接导致执行的结果如下
Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/local/1.7.0_72/bin/java
在看上面 GetVersion的执行过程 将这个输入带入GetVersion的输入 执行结果
# echo 'Error: JAVA_HOME is not defined correctly.We cannot execute /usr/local/1.7.0_72/bin/java' | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@'
1.7.0
我一直以为我的ant出了问题后来才发现是这里导致的,这个真的是预先挖号的坑跳进去了 囧~~~在这里抽自己一巴掌~啪!