ubuntu 14.04下编译JDK7

2016-06-05  本文已影响1417人  山间听雨者

编译前准备

1. 下载openjdk

官方建议是使用Mercurial来下载代码,Mercurial是一款免费的、跨平台的、分发源码的管理工具。但由于openjdk源码是放在国外的服务器上的,下载及其缓慢,所以我建议直接下载源码压缩包。我下载的源码压缩包是openjdk7。

openjdk-7u40

2. 解压源码压缩包,解压后的目录结构

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没有错误,那结果如图:

上一篇下一篇

猜你喜欢

热点阅读