一、环境
VMware 16 下的 Ubuntu 18.04 LTS 虚拟机
二、下载OpenJDK源码
官网下载(速度较慢):https://download.java.net/openjdk/jdk12/ri/openjdk-12+32_src.zip
坚果云:https://www.jianguoyun.com/p/DYbYj_wQyMDKChjH378EIAA (访问密码:2sPTbZ)
三、构建编译环境
安装GCC或者CLang进行编译,确保最低版本在GCC 4.8和CLang 3.2以上。
安装GCC:
sudo apt-get install build-essential
下载依赖库,见下表:
工具 | 安装命令 |
FreeType | sudo apt-get install libfreetype6-dev |
CUPS | sudo apt-get install libcups2-dev |
X11 | sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxtst-dev |
ALSA | sudo apt-get install libasound2-dev |
libffi | sudo apt-get install libffi-dev |
Autoconf | sudo apt-get install autoconf |
ps: Linux终端中粘贴的快捷键为shift
+insert
在编译JDK时,我们要另外准备至少低一个版本的已经编译好的JDK。因为OpenJDK由HotSpot、JDK类库、JAXWS、JAXP等部分组成,其中一部分HotSpot由C、C++编写,而更多的代码则是用Java语言实现的,因此编译这些代码需要另外一个编译器可用JDK,称为Bootstrap JDK。
安装JDK 11:
sudo apt-get install openjdk-11-jdk
四、进行编译
配置编译参数:部分配置项见下表,其他参数可使用bash configure --help
查看
配置项 | 描述 |
--with-debug-level=<level> | 设置编译的级别,可选值有release、fastdebug、slowdebug。越往后进行的优化措施越少,带的调试信息就越多。默认为release。 |
--with-version-string=<string> | 设置编译JDK的版本号,如当执行java -version的输出就会显示该信息 |
--with-jvm-variants=<variants>[,<variants>…] | 编译特定模式的HotSpot虚拟机,可以多个模式共存。可选值有server、client、minimal、core、zero、custom |
--with-target-bits=<bits> | 指明要编译32位还是64位的虚拟机,在64位机器上也可以通过交叉编译生成32位的虚拟机 |
–enable-debug | 等效于–with-debug-level=fastdebug |
在解压后的jdk目录下打开终端,输入命令ll
后有bin、src等文件夹(本人将文件解压在了/home/java/openjdk12中)
编译FastDebug版、仅含有Server模式的HotSpot虚拟机:
bash configure --enable-debug --with-jvm-variants=server
若有依赖项缺失,configure会给出提示,按照提示执行完再次configure即可。
配置成功如下图所示:
注:如果多次编译,或目录结构成功产生后又修改了配置,需要先make clean
和 make dist-clean
清理目录,才能确保新配置生效
configure成功后输入make images
执行整个OpenJDK编译
笔者的虚拟机共有4核,内存4 GB,大概编译了7分钟。中间编译时失败了一次,是因为第一个configure缺失依赖后,安装依赖完没有执行两次clean就直接configure了。
OpenJDK源码的“build/配置名/jdk”目录下即为OpenJDK的完整编译结果。
查看编译好的Java版本:java -version