编译前准备
1. 下载openjdk。
openjdk-7u402. 解压源码压缩包,解压后的目录结构
3. 安装jdk的依赖库
(1)、如果系统中已经安装了jdk和ant,运行:sudo apt-get install build-essential gawk m4 libasound-devlibcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutilslibmotif3 libmotif-dev .
(2)、如果系统中还未安装jdk和ant,运行:sudo apt-get install build-essential gawk m4 openjdk-7-jdklibasound-dev libcups2-dev libxrender-dev xorg-dev xutils-devx11proto-print-dev binutils libmotif3 libmotif-dev ant.
说明:安装的jdk是作为编译openjdk时的java环境的,因为openjdk中大部分代码还是java的,所以需要一个启动的jdk,下载的启动(bootstrap)jdk一定要在jdk6 update 14之后的版本。需要下载的ant版本必须大于或等于1.7.1.
4. 设置系统的环境变量,以满足openjdk的编译
sudo gedit /etc/bash.bashrc
在/etc/bash.bashrc中增加如下内容:
#语言选项这个必须设置,否则编译好后会出现一个hashtable的npe错
export LANG=C
#设置bootstrap JDK的安装路径,必须设置
exportALT_BOOTDIR=/home/java/jdk/jdk1.7.0_45/
#运行自动下载依赖
export ALLOW_DOWNLOADS=true
#
export SKIP_COMPARE_IMAGES=true
#使用预编译头,不加这个编译会慢一些
export USE_PRECOMPILED_HEADER=true
#设置要编译的内容
exportBUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true
#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug
#把他设置为false可以避开javaws和浏览器java插件之类的部分的build
BUILD_DEPLOY=false
#把他设置为false就不会build出安装包,因为安装包里有一些奇怪的依赖,
#但即便不build出它也可以得到完整的jdk映像,所以还是别build它好
BUILD_INSTALL=false
#编译结果所存放的路径
exportALT_OUTPUTDIR=/home/fengyu_daniel/fengyu/java/openjdk/
#必须设置
unset JAVA_HOME
unset CLASSPATH
正式编译阶段
1. 进入解压后的openjdk源码根目录:cd /home/openJdk/openJdk/
2. 重定向日志信息,保留编译期间的日志:make 2>&1 | tee $ALT_OUTPUTDIR/build.log
3. 检查之前设置的环境变量是否正确:make sanity;如果环境变量设置正确,结果如图:
编译前环境设置检查结果4. 接下来进行编译:make
说明:如果编译的时候报错了,尤其时关于langtools/make/build.xml的错误,可能是因为bootstrap jdk的版本的原因,可以换一个版本低于openjdk的版本。openJdk7的bug修复。编译期间出现一个时间的错误,这是openjdk7u40的一个bug,替换源码目录下的对应的几个文件内容就可以编译了,见地址:http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/74a70385c21d#l11.1.编辑比较耗时,在我本人的笔记本上大约编译铃45分钟。
5. 编译成功的结果如图:
控制台编译结果 编译结果目录结构检测编译结果
1. 结果路径下的j2sdk-image目录下的所有文件就是我们常见的jdk。
2. 进入目标路径下的j2sdk-image目录:java -version
如果编译的jdk没有错误,那结果如图:
网友评论