在读《深入理解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,如果出现以下提示则证明编译成功。