自己动手编译jdk

在读《深入理解JAVA虚拟机》的时候需要进行自己手动编译jdk,在经过了无数次的尝试之后终于编译成功了,先上成果图:


编译成功结果图

一、需要进行准备的软件包括:

1、ant

  用于执行java代码中的ant脚本,可以选择在https://archive.apache.org/dist/ant/binaries/进行下载(网速可能会很慢)1.8.2版本,高一点版本的暂时没有进行尝试,PS:如果网速太慢的话可以选择在某盘搜索一下资源。

2、openjdk

openjdk选择1.7的版本进行编译,下载地址:https://download.java.net/openjdk/jdk7u6/promoted/b24/openjdk-7u6-fcs-src-b24-28_aug_2012.zip,在下载完成之后对压缩包进行解压。

3、jdk

jdk的版本选用1.6版本的JDK,如果选择高版本的JDK时可能会出现ClassNotFound的操作,这个问题的原因可能为版本太高的问题,所以选择使用1.6的版本。

4、centos 7

二、配置编译环境

yum install -y mercurial

yum install -y ant ant-nodeps

yum install -y libX11* libX*

yum install -y libXi-devel libXtst-devel libXt-devel freetype* 

yum install -y alsa-lib-devel cups-devel

yum install -y gcc gcc-c++

三、开始编译

1、在openjdk的目录下新建一个脚本文件。具体内容如下:

export LANG=C

export ALT_BOOTDIR=/usr/java/jdk1.6.0_45 #当前jdk的路径

export ALT_JDK_IMPORT_PATH=/usr/java/jdk1.6.0_45

export ALLOW_DOWNLOADS=true

export HOTSPOT_BUILD_JOBS=4

export ALT_PARALLEL_COMPILE_JOBS=4

export SKIP_COMPARE_IMAGES=true

export USE_PRECOMPILED_HEADER=true

export BUILD_LANGTOOLS=true

#export BUILD_JAXP=false

export BUILD_JAXWS=false

#export BUILD_CORBA=false

export BUILD_HOTSPOT=true

export BUILD_JDK=true

export DISABLE_HOTSPOT_OS_VERSION_CHECK=ok

export SKIP_DEBUG_BUILD=false

export SKIP_FASTDEBUG_BUILD=true

export DEBUG_NAME=debug

BUILD_DEPLOY=false

BUILD_INSTALL=false

export ALT_OUTPUTDIR=/home/java/openjdk/build   #需要进行输出的文件目录

unset JAVA_HOME

unset CLASSPATH

make sanity

具体脚本的含义在这里不做说明了,大家可以去看书即可。

编译该脚本,如果出现Sanity check passed字样则代表这编译成功。

在编译检查完成之后就可以真正的进行编译了,在之前新建的脚本最后加入

make sanity && make 2>&1 | tee $ALT_OUTPUTDIR/build.log

在一次进行编译,可能会出现以下错误:

java.lang.RuntimeException: time is more than 10 years from present: 1136059200000,

需要到openjdk以下路径/jdk/src/share/classes/java/util/CurrencyData.properties对配置文件进行修改,将里边所有的时间修改成近10年的时间即可。

编译成功的话就可以出现图片中的提示。

在进行编译完成之后可以进行测试,在输出的文件目录中的/j2sdk-image/bin文件夹中执行java -version,如果出现以下提示则证明编译成功。


编译成功

你可能感兴趣的:(自己动手编译jdk)