ubuntu14.04编译openjdk7

来源:互联网 发布:seo转行前端开发 编辑:程序博客网 时间:2024/06/02 07:02

一、编译环境准备

首先我们打开终端输入指令:java -version,来查看是否已安装jdk,以及安装的版本。如果已经安装了jdk,则请先卸载!(当然可以不用卸载,只是想尽量避免一些干扰)

1、ANT等编译工具下载

首先打开终端,输入指令:

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

然后输入指令:ant -version,查看是否安装成功。

2、安装最新的Mercurial(openjdk使用的版本控制工具)

Mercurial最好是最新的,否则最后编译openjdk的时候会出错。首先打开终端,依次输入如下指令:

sudo apt-get install python-all-dev

sudo apt-get install python-setuptools

sudo easy_install -U mercurial

然后输入指令:hg --version,来查看是否安装成功。

3、下载BootstrapJDK

编译openjdk需要一个BootstrapJDK做支持,BootstrapJDK通常比openjdk旧一个版本,比如本文就采用oracle的jdk6来作为BootstrapJDK。首先用命令新建jvm目录(如果已经存在jvm目录,则无需新建):

sudo mkdir /usr/lib/jvm

然后将下载好的jdk-6u45-linux-x64.bin(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html)放到jvm目录下。接下来用命令:

sudo chmod u+x /usr/lib/jvm/jdk-6u45-linux-x64.bin

修改该bin文件的权限,让它变成可执行的。最后用命令:

sudo /usr/lib/jvm/jdk-6u45-linux-x64.bin

解压后得到一个名为jdk1.6.0_45的文件夹。

4、安装编译openjdk7的依赖

输入命令:sudo apt-get build-dep openjdk-7

5、下载openjdk7的源码包

通过版本控制工具Mercurial,将OpenJDK7下载到openjdk7目录下。首先打开终端,并定位到/usr/lib/jvm目录,然后依次输入如下指令:
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u40 openjdk7
cd openjdk7
bash ./get_source.sh
下载完成后,我们在openjdk7目录下可以看到有如下几个子目录:
hotspot: 放有OpenJDK Hotspot Virtual Machine 的源代码和make文件
langtools: 放有OpenJDK 的javac 等工具的源代码和make文件
cobra: 放有OpenJDK Cobra 的源代码和make文件
jaxws: 放有OpenJDK JAXWS 的相关信息和make文件, 具体的源代码在编译时会下载
jaxp: 放有OpenJDK JAXP 相关信息和make文件,具体的源代码在编译时会下载 
jdk: 放有OpenJDK runtime libraries 的源代码和make文件

二、开始编译

1、修改CurrencyData.properties文件

在编译之前,我们需要先对/usr/lib/jvm/openjdk7/jdk/src/share/classes/java目录下的CurrencyData.properties文件中的时间进行修改(把年份修改到前10年之内),否则在编译openjdk时会报错,具体修改如下:
修改108行
AZ=AZM;2010-12-31-20-00-00;AZN
修改381行
MZ=MZM;2010-06-30-22-00-00;MZN
修改443行
RO=ROL;2010-06-30-21-00-00;RON
修改535行
TR=TRL;2010-12-31-22-00-00;TRY
修改561行
VE=VEB;2010-01-01-04-00-00;VEF

2、编写脚本

OpenJDK在编译时会读取许多环境变量,所以必须对Linux的环境变量进行配置,这里我们把配置信息写在一个新建的build.sh的脚本文件。打开终端,定位到/usr/lib/jvm/openjdk7目录下,执行如下命令:
sudo vim build.sh
并写入如下代码:
#!/bin/bash# 语言选项,必须设置,否则编译好后会出现一个 HashTable 的 NPE错export LANG=C# Bootstrap JDK 解压路径,必须设置export ALT_BOOTDIR=/usr/lib/jvm/jdk1.6.0_45# 允许自动下载export ALLOW_DOWNLOADS=true# 比较本次 build 出来的映像与先前版本的差异export SKIP_COMPARE_IMGAGES=true# 使用预编译头文件,不加这个编译会变慢export USE_PRECOMPILED_HEADER=true# 要编译的内容export BUILD_LANGTOOLS=trueexport BUILD_HOTSOPT=trueexport BUILD_JDK=trueexport BUILD_JAXP=true  export BUILD_JAXWS=true  export BUILD_CORBA=true#是否跳过编译debug版  export SKIP_DEBUG_BUILD=false#是否跳过编译fastdebug版 export SKIP_FASTDEBUG_BUILD=true export DEBUG_NAME=debug # 把它设置为 false 可以避开 javaws 和浏览器 Java 插件之类的部分的 buildBUILD_DEPLOY=false# 把它设置为 false 就不会 build 出安装包,因为安装包里有奇怪的依赖BUILD_INSTALL=false# 编译结果所存放的路径export ALT_OUTPUTDIR=/usr/lib/jvm/openjdk7/build# 这两个环境变量必须去掉,不然会发生奇怪的事情unset JAVA_HOMEunset CLASSPATH# 编译检查make sanity && make DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

3、编译

退出并保存上述脚本文件后,输入如下命令:
sudo bash build.sh
对openjdk7进行编译

三、编译结果

i7处理器的编译总时间大约为15分钟,编译成功后的结果如图1所示。

图1
输入指令:java -version,查看是否编译成功,如图2所示。

图2

四、总结

编译过程中,根据安装环境的不同,所遇到的编译问题或错误也会不同。若在编译过程中遇到了本文未提及到的问题或错误,请参考如下博文:
http://blog.csdn.net/y444400/article/details/65487458
http://cduym.iteye.com/blog/1892416