一、环境

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中)

java加openfrign为什么编译成功了但是无法启动_可选值

编译FastDebug版、仅含有Server模式的HotSpot虚拟机:

bash configure --enable-debug --with-jvm-variants=server

若有依赖项缺失,configure会给出提示,按照提示执行完再次configure即可。

java加openfrign为什么编译成功了但是无法启动_java_02

配置成功如下图所示:

java加openfrign为什么编译成功了但是无法启动_可选值_03

注:如果多次编译,或目录结构成功产生后又修改了配置,需要先make cleanmake dist-clean 清理目录,才能确保新配置生效

configure成功后输入make images执行整个OpenJDK编译

笔者的虚拟机共有4核,内存4 GB,大概编译了7分钟。中间编译时失败了一次,是因为第一个configure缺失依赖后,安装依赖完没有执行两次clean就直接configure了。

OpenJDK源码的“build/配置名/jdk”目录下即为OpenJDK的完整编译结果。

查看编译好的Java版本:java -version

java加openfrign为什么编译成功了但是无法启动_java_04