编译OPENJDK小记
前言
先说下笔者的环境。
系统:MAC OS 10.13.2
Xcode版本:9.2
jdk的源码管理工具,官方使用的是mercurial可以通过homebrew安装。笔者的jdk源码直接从github下载的:github.com/dmlloyd/ope…
下载好之后就可以进行编译了。
编译
下载好进入目录下面,执行脚本:
./configure --with-target-bits=64 --with-freetype=/usr/local/Cellar/freetype/2.8.1 --enable-ccache --with-jvm-variants=server,client --with-boot-jdk-jvmargs="-Xlint:deprecation -Xlint:unchecked" --disable-zip-debug-info --disable-warnings-as-errors --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log
注意,上面的freetype,需要替换成本机实际安装的版本。
再注意,如果编译中出错,内容提示你:你的freetype是”system”的并且是”bundled”的,这时候不要尝试更改freetype的文件夹权限,直接把上述脚本中--with-freetype的值改为bundled即可。
还有一个比较坑的地方。以前编译过虚拟机的同学应该都知道,编译虚拟机需要一个boot jdk,即为引导jdk。这个boot jdk是如果要编译1.8版本的jdk,需要1.7版本的jdk。
但是笔者编译openjdk1.9的时候,总是报错boot jdk版本不对,非常蛋疼(笔者机器上装的1.8)。一开始我以为是路径不对,改了几次发现,其实编译会自动扫描JAVA_HOME下的jdk版本并且找一个合适的,在此提醒各位,如果发现有类似的问题,赶紧按照提示用brew cask install java下载一个最新版本的jdk就好了。
配置如果出现形如下图:

即为配置ok,可以进行编译了。
再执行make脚本:
export LANG=C
make all LOG=debug 2>&1 | tee make_mac_x64.log
编译会比较旧,电脑会比较烫,等一下。成功以后会在jdk目录下的build目录下生成一个文件夹,目录形式类似:

红框就是源码的jdk目录结构。我们进入到图中红色标记的jdk文件夹的bin目录下,执行./java -version。注意不要执行java -version,这样运行的是本机JAVA_HOME里那个java,不是编译的。
执行之后结果类似:
OpenJDK Runtime Environment (slowdebug build 11-internal+0-adhoc.xxx.openjdk)
OpenJDK 64-Bit Server VM (slowdebug build 11-internal+0-adhoc.xxx.openjdk, mixed mode)
结果中能找到你的主机名,比如OpenJDK Runtime Environment (slowdebug build 11-internal+0-adhoc.主机名/用户名.openjdk)。至此,你就有个属于自己的jdk了~