环境准备

我的编译环境的为Ubuntu 12.04 32位系统,双核

OpenJDK 源码

通过 Mercurial 代码管理工具下载太慢,这里选择直接下载官网源码包

Apache Ant

用于执行 Java 编译代码中的 Ant 脚本

Bootstrap JDK

编译 OpenJDK 需要一个可用的 JDK

安装依赖软件命令

打开终端,输入以下命令:

sudo apt-get install build-essential gawk m4 openjdk-6-jdk
libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev
x11proto-print-dev binutils libmotif3 libmotif-dev ant

如何找不到软件包,可以先执行以下命令:

sudo apt-get update

这个命令将会更新可用软件列表

解压JDK源码

将源码解压到 /home/jacend/Download/ 目录下面,大家可以自己选择一个合适的目录

unzip openjdk-7u40-fcs-src-b43-26_aug_2013,zip /home/jacend/Download/

解压后再 /home/jacend/Download/ 下面会出现一个 openjdk 的源码目录,该目录下包括了jdk,hotspot以及一些Java工具的源码

编译

创建一个安放编译结果的目录

我会将编译的结果放在 /home/jacend/pgSoft/openjdk_7u4/build

mkdir /home/jacend/pgSoft/openjdk_7u4
cd /home/jacend/pgSoft/openjdk_7u4
mkdir build

创建一个运行编译的脚本

我们将在解压的源码包中创建一个 build_open_jdk.sh 的脚本并且赋予执行权限

cd /home/jacend/Download/openjdk/
touch build_open_jdk.sh
sudo chmod +x build_open_jdk.sh

sudo gedit build_open_jdk.sh

脚本中输入以下内容

#语言选项
export LANG=C
## Bootstarp JDK 的安装路径,也就是我们安装的 openJDk 6 的根目录
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386
#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线程数,设置与CPU内核数量一致,我的笔记本为双核CPU,此项可以提高编译速度
export HOTSPOT_BUILD_JOBS=6
export ALT_PARALLEL_COMPILE_JOBS=6

export SKIP_COMPARE_IMAGES=true
#使用预编译头文件,不加这个编译会慢很多
export USE_PRECOMPLIED_HEADER=true

#要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true

#把它设置为 false 可以避开 javaws 和浏览器插件之类的部分的 build
BUILD_DEPLOY=false

#把它设置为 false 就不会 build 出安装包,因为安装包中有些奇怪的依赖
#但即便不build出它已经可以得到完成的JDK映像了,所以还是不 build 了
export BUILD_INSTALL=false

#编译结果所存在的路径
export ALT_OUTPUTDIR=/home/jacend/pgSoft/openjdk_7u4/build

#这两个编译变量必须去掉,不然编译会出问题
unset JAVA_HOME
unset CLASSPATH

#检查设置是否正确
make sanity
make 2>&1 |tee $ALT_OUTPUTDIR/build.log

执行脚本

cd /home/jacend/Download/openjdk/
sh ./build_open_jdk.sh

编译过程中的错误

列举一下编译过程的错误,供大家参考,大家可以预先处理了再执行编译脚本

  1. error: "__LEAF" redefined [-Werror]
    碰到这个错误可以 参考 在这个环境下应该不会报这个错误

  2. JVM_FindClassFromCaller
    修改文件:/home/jacend/Download/openjdk/hotspot/make/linux/Makefile 注释掉包含test_gamma字样的所有行即可

  3. Error: time is more than 10 years from present: 1104530400000

    进入解压后openJDk目录,找到CurencyData.properties,将所有涉及到时间修改为10年之内的时间,例如将2004-01-13-20-00-00 修改成 2016-01-13-20-00-00

    cd /home/jacend/Downloads/openjdk/jdk/src/share/classes/java/util
    sudo gedit CurrencyData.properties

Jacendfeng
544 声望23 粉丝

爱豆瓣,爱知乎,爱电影,KTV垃圾麦主,专注Java 服务器端开发,技术文章整理者。