在阅读《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》,所以……
记录一次在编译OpenJDK12遇到的各种问题及解决方法。

这过程,,不足为外人道也。。不多说,上干货!

这是笔记本的信息。硬件环境

在这里插入图片描述
多事啊,刚上手的第一台Mac遇到15,变化了好多,遇到问题跟网上解决方式不一样。特别是zsh bash的区别。

一、准备环境!

在这里插入图片描述
这个直接同个App Store下载即可,而且它会自动添加安装Command Line Tools。
没有的话:

xcode-select --install

openjdk12源码下载

https://hg.openjdk.java.net/jdk/jdk12/,然后点击左边菜单中的“Browse”,将显示如图1-9的源码根目录页面。此时点击左边的“zip”链接即可下载当前版本打包好的源码,到本地直接解压即可。

请注意有大坑啊。要解压到系统卷,不要放在数据卷,会出现执行不了 ./configure —help 这个可执行文件。一开始个人以为是自己的命令行环境没配置好,一直报找不到这个文件,或者没有这个命令。

在这里插入图片描述
写的丑,别见怪,哈哈。

然后再搭建一个openjdk11环境来编译。
书中说法如下:

最后,假设要编译大版本号为N的JDK,我们还要另外准备一个大版本号至少为N-1的、已经编译好的JDK,这是因为OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP……)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“BootstrapJDK”。编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本。

地址下载安装
https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
安心安装吧。像我就拥有了jdk8和jdk11两个了。

二、编译过程

1、依赖环境

借助homebrew来安装
如果没有可以参考homebrew官网

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

2、主要安装三个依赖库

brew install ccache  //加速编译
brew install freetype //字体引擎,编译过程中会被依赖到
brew install autoconf

3、检查环境

进入之前解压的jdk12的文件夹中
可以在doc文件夹下的build.html文件查看官方文档

configure后面参数的含义可以参考结尾处的参考

注意:
其中–with-freetype的值是上一步安装的freetype路径
可以通过brew list freetype的安装路径

–with-boot-jdk是之前安装的openjdk11的路径

bash ./configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.2  --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors

不行的话,报了以下:
configure: error: 'valid values for --with-freetype are ‘system’ and ‘bundled’

跟着改就得了。
解决方法:
不要尝试更改freetype的文件夹权限,直接把上述脚本中–with-freetype的值改为bundled即可。

bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=bundled  --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors

执行成功后出现下图。

在这里插入图片描述

三、编译

执行编译

 make images
 

当这一步报了一个奇怪的错时,

Error: No CONF given, but more than one configuration found.
Available configurations in /Users/zhuchen/IdeaProjects/jdk12-06222165c35f/build:
* macosx-x86_64-server-release
* macosx-x86_64-server-slowdebug
Please retry building with CONF=<config pattern> (or SPEC=<spec file>).


请执行

//到build目录下删除不想要的。
//指定构建版本:
make images CONF=macosx-x86_64-server-slowdebug

好了,很好,千辛万苦到这了,请坚持。哈哈,开空调风扇给小脑脑散散热,这编译太烧脑了。

结束之后又如下提示:

Finished building target ‘images’ in configuration ‘macosx-x86_64-server-slowdebug’

检查一下哈

进入如下所示的jdk目录的bin文件夹中
执行./java -version

在这里插入图片描述

出现以下内容:
在这里插入图片描述
恭喜恭喜!你完成了Mac和OpenJDK12的双重考验,达到人生巅峰了。

以上仅供参考!不足之处敬请见谅!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐