Download: http://www.java.net/download/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip
Wiki: https://wiki.openjdk.java.net/display/jdk7u/Main
系统环境及其创建
类型1:`virtualbox‘ + `ubuntu 10.10 server amd64’
为了更好的发挥硬件资源,并提高编译速度,我选择「类型2」。
类型2:`chroot‘ + `ubuntu 10.10 server amd64’
有关chroot环境的制作参考:「任意Linux发行版的chroot环境」
如果需要ubuntu 10.10的源,参考:Linux Package Manager:z.Source List
#!/bin/bash ############################################################ # 进入chroot环境 ############################################################ # 定义新的根目录 LFS=/mnt/uui/chos/ubuntu-10.10 # 先挂载「虚拟文件系统」 mount -v --bind /dev $LFS/dev mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run # 进入chroot环境 chroot $LFS env -i \ HOME=/root \ TERM="$TERM" \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /bin/bash --login +h
包依赖
阅读源码目录下的README-builds.html文件,及《深入理解Java虚拟机:JVM高级特性与最佳实践》。
以文档指引为主。
源码获取
Source: https://jdk7.java.net/source.html
以下内容取自源码目录下README-builds.html#get_source部分:
从OpenJDK的Mercurial仓库中下载源码
#!/bin/bash # 获取整套的源码,包括Forest Extension hg fclone http://hg.openjdk.java.net/jdk7u/jdk7u6 YourOpenJDK # 获取整套的源码,但不包括Forest Extension hg clone http://hg.openjdk.java.net/jdk7/jdk7 YourOpenJDK
进入源码目录,执行get_source.sh
#!/bin/bash cd YourOpenJDK sh ./get_source.sh
执行结束后,源码的检出就完成了。
如果在多个仓库中同时执行hg命令?
一旦拥有所有的仓库,脚本make/scripts/hgforest.sh就可以用来在每个仓库上重复相同的hg命令,例如:
#!/bin/bash cd YourOpenJDK sh ./make/scripts/hgforest.sh pull -u
您可能会发现此脚本make/scripts/hgforest.sh比由Forest Extension提供的hg forest命令更快。
编译
请仔细阅读源码目录下的README-builds.html;
编译主要有两大步骤:
构建需要的依赖
构建的依赖部分在README-builds.html#SDBE章节有说明。
构建脚本及环境变量
#!/bin/bash # export LANG=C export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk export ANT_HOME=/usr/share/ant/ export BUILD_HOTSPOT=true export BUILD_CORBA=true export BUILD_JAXP=true export BUILD_JAXWS=true export BUILD_JDK=true export BUILD_LANGTOOLS=true export SKIP_DEBUG_BUILD=false export SKIP_FASTDEBUG_BUILD=false unset JAVA_HOME unset LD_LIBRARY_PATH # 执行检查; make sanity # make,输出并保存日志 make 2>&1 | tee build.log
编译结果
编译产生的JDK位于:build/linux-amd64/j2sdk-image
Error List
#1 Error: time is more than 10 years from present
自2015年开始一般会出现如下异常
Error: time is more than 10 years from present: 1136059200000
java.lang.RuntimeException: time is more than 10 years from present: 1136059200000
……
解决:
通过修改 jdk/src/share/classes/java/util/CurrencyData.properties 文件,找到以下两行(大约在第 534 行):
TR=TRL;2004-12-31-22-00-00;TRY
修改10年之前的时间修改为10年之内即可:
TR=TRL;2014-12-31-22-00-00;TRY
该文件里,其他几处也涉及到的时间问题,都改掉吧!!!
我一共修改了 5 处,下面是修改以后的结果:
MZ=MZM;2014-06-30-22-00-00;MZN
RO=ROL;2014-06-30-21-00-00;RON
TR=TRL;2014-12-31-22-00-00;TRY
VE=VEB;2014-01-01-04-00-00;VEF
(这么做并不严谨, 正确的做法是 1136059200000 对应的“日期”在文件中找到,然后修改对应的日期,修改为10年之内:)
#2 This OS is not supported
>&2 echo “*** This OS is not supported:” `uname -a`; exit 1;
原因:操作系统不支持,我使用的内核版本 4.x 的;
解决:修改hotspot/make/linux/Makefile文件,第 234 行:
为