网上几乎都建议在linux环境下进行操作,所以刚好利用了前段时间买的阿里云ECS。
编译openjdk首先需要一份源码,为此需要下一个软件去拉取代码,这个mercurial和git类似就是用来拉代码的。
根据centos5.X通过yum安装mercurial这篇文章快速安装一个mercurial,然后用这个mercurial拉下openjdk代码,依次执行如下命令:
hg clone https://hg.openjdk.java.net/jdk8u/jdk8u openjdk
cd openjdk
chmod u+x get_source.sh
./get_source.sh
之中最后执行get_source.sh的目的是
jdk8u/jdk8u 是一个“代码森林”(forest),底下有很多个repo。这些repo在默认的Mercurial管理下是没有关联的。get_source.sh是用来把下面的repo都下载下来的脚本。后面要更新整个forest里所有repo的时候也可以用这个脚本,它会自动对各repo做hg pull -u。
编译openjdk除了需要一份 源码还需要一个已经安装的jdk
另外,还需要准备一个6u14以上版本的JDK,因为OpenJDK的各个组成部分有的使用C++编写的,更多的代码则是使用Java自身实现的,因此编译这些Java代码需要用到一个可用的JDK,官方称这个JDK为“Bootstrap JDK”
然后根据此文下载各种编译所需的依赖包centos7 编译 openjdk8
然后执行configure脚本
bash ./configure --enable-debug --with-boot-jdk=/usr/java/jdk-13.0.1
因为我本来装的是最新版的jdk13,但是实操下来确实不行,因为指定的Bootstrap JDK
最好是上一个版本的jdk,所以我准备安装一个jdk7。
安装好了之后再次尝试:
bash ./configure --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-target-bits=64 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
之后就很顺利的打印了如下信息

到这里生成一个编译的配置。
然后就可以开始正式编译
make all

如其他文章所说确实要耗费30min左右时间。

最后验证编译好的jdk是否可用,切换到目录
build/linux-x86_64-normal-server-slowdebug/jdk/bin
,运行./java -version

显示版本号1.8 ,编译成功了。
做这样一次尝试的原因是之前看到有一位大神在查bug的时候直接修改了openjdk的一部分代码并编译了修改后的jdk用做调试,觉得在一些场合真的会用到,所以先摸清门路,防止下次踩坑。
网友评论