Ubuntu 18.0.4系统 自定义 编译 OpenJDK12

目录

一. 系统要求

二. 构建编译环境

1. OpenJDK12 源码

2. 构建工具

三. 进行编译

1.configure命令-配置

2.make命令-编译

3.配置JDK


一. 系统要求

推荐使用Linux或MacOS来构建OpenJDK,这两个系统在准备构建工具链和依赖项上要比Windows或Solaris要容易很多,此次文章在Ubuntu 18.04LTS上构建

二. 构建编译环境

1. OpenJDK12 源码

准备OpenJDK12的源码,下载地址可以访问该网站:https://hg.openjdk.java.net/jdk/jdk12/ ,然后点击左边菜单中的“Browse”,将会显示下图中的源码根目录页面

Ubuntu 18.0.4系统 自定义 编译 OpenJDK12_第1张图片

此时点击左边的“zip”链接即可下载当前版本打包好的源码,下到本地直接解压即可。

2. 构建工具

可以自行选择安装GCC或CLang来进行编译,但必须确保最低的版本为 GCC 4.8 或者 CLang 3.2 以上,官方推荐使用 GCC 7.8 或者 CLang 9.1 来完成编译。在 Ubuntu 系统上安装 GCC 的命令为:

sudo apt-get install build-essential

在编译过程中还需要依赖FreeType、CUPS等若干第三方库(见表1-1),可以按照提供的安装命令,将以下工具安装完成:

表1-1 OpenJDK编译依赖库
工具 库名称 安装命令
FreeType The FreeType Project sudo apt-get install libfreetype6-dev
CUPS Common UNIX Printing System

sudo apt-get isntall libcups2-dev

X11 X Window System sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
ALSA Advanced Linux Sound Architecture sudo apt-get install libasound2-dev
libffi Protable Foreign Function Interface Library sudo apt-get install libffi-dev
Autoconf Extensible Package of M4 Macros

sudo apt-get install autoconf

最后,假设要编译的版本号为 N 的JDK(OpenJDK12),我们还要另外准备一个版本号至少为 N - 1 (OpenJDK11)的、已经编译好的JDK,因为在编译过程中,更多的代码是使用Java语言来实现的。所以还需要安装OpenJDK11:

sudo apt-get install openjdk-11-jdk

三. 进行编译

1.configure命令-配置

环境都准备好了,现在直接进入OpenJDK12的解压后根目录内,可以开始执行configure命令。该命令承担了依赖项检查、参数配置和构建输出目录结构等多项职责。

//查看configure的帮助
bash configure --help

//一般的configure命令都是这样执行
bash configure [options]

//譬如,编译FastDebug版、仅含Server模式的HotSpot虚拟机,命令为:
bash configure --enable-debug --with-jvm-variants=server

如果没有特别的自定义需求,可以直接执行该命令,生成默认配置:

bash configure

一般第一次执行,会检测到有工具链或依赖项的缺失,可能会提示:

configure: error: Could not find fontconfig! You might be able to fix this by running 'sudo apt-get install libfontconfig1-dev'.
configure exiting with result code 1

这个时候可以直接按照提示,将缺失的工具或依赖安装上即可再次执行:

//安装确实的fontconfig
sudo apt-get install libfontconfig1-dev

//继续执行
bash configure

如果一切顺利的话,就会收到配置成功的提示,并且输出调试级别,Java虚拟机的模式、特性,使用的编译器版本等配置摘要信息,如下所示。并且可以在 “build/配置名称” 目录下看到产生的配置。如果多次编译,或者目录结构成功产生后又再次修改了配置,必须先试用 “make clean” 和 “make dist-clean” 命令清理目录,才能确保新的配置生效:

Ubuntu 18.0.4系统 自定义 编译 OpenJDK12_第2张图片

2.make命令-编译

configure执行完成后,接下来就可以通过输入下面命令,执行整个OpenJDK编译

make images

除了该命令外,make还有以下命令可执行:

hotspot:只编译HotSpot虚拟机
hotspot-:只编译特定模式的HotSpot虚拟机
docs-image:产生JDK的文档镜像
test-image:产生JDK的测试镜像
all-image:相当于连续调用product、docs、test三个编译目标
bootcycle-images:编译两次JDK,其中第二次使用第一次的编译结果作为Bootstrap JDK
clean:清理make命令产生的临时文件
dist-clean:清理make和configure命令产生的临时文件

全量编译整个OpenJDK 12 大概需要15分钟时间,如果之前已经全量编译过,只是修改了少量文件的话,增量编译可以在数十秒内完成。编译完成之后,进入“build/ 配置名称 /jdk”目录下就可以看到完成的编译结果,把它设置好JAVA_HOME的环境变量就可以作为一个完整JDK来使用了,如果没有人为设置过JDK开发版本的话,这个JDK的开发版本号里默认会带上编译的机器名。如下所示:

3.配置JDK

这个已经有很多教程可以学习,这里也再阐述一下。可以直接执行以下命令修改:

//编辑环境变量
sudo gedit ~/.bashrc

//======== 在文件末尾换行添加一下内容 =========
export JAVA_HOME=/home/develop/jdk12/build/linux-x86_64-server-release/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
//==========================================

//重载
sudo source ~/.bashrc

 


本文内容参考自《深入理解Java虚拟机-第3版》周志明著

你可能感兴趣的:(JVM)