在Linux x64环境下不依赖预编译BootJDK构建OpenJDK的可行性问询
无预编译BootJDK构建OpenJDK(RHEL系发行版)
首先明确核心结论:单独编译Hotspot绕不开BootJDK依赖——Hotspot的构建流程不仅要编译C/C++代码,还需要用JDK工具链(如javac编译辅助Java类、jar打包组件)生成中间产物,所以configure阶段必然会检查BootJDK。要符合Fedora禁止预编译二进制的规则,必须走源码自举构建路线,从最基础的开源Java编译器逐步迭代出完整JDK。
可行的自举构建步骤
1. 用GCJ构建初始基础JDK
GCJ是GNU套件中的Java编译器,属于gcc生态,可从源码编译安装(符合Fedora规则),能用来构建OpenJDK的早期版本作为初始BootJDK:
- 安装依赖:
dnf install gcj gcj-devel gcc-c++ make autoconf libX11-devel libXext-devel libXrender-devel libXtst-devel libXt-devel cups-devel fontconfig-devel alsa-lib-devel - 构建OpenJDK 6(作为第一级BootJDK):
git clone https://github.com/openjdk/jdk6.git cd jdk6 ./configure --with-gcj --disable-debug --disable-dependency-tracking make all export BOOTJDK=$(pwd)/build/*/jdk
2. 迭代构建更高版本JDK
用初始BootJDK逐步升级,直到目标版本:
- 用OpenJDK 6构建OpenJDK 8:
cd .. git clone https://github.com/openjdk/jdk8.git cd jdk8 ./configure --with-boot-jdk=$BOOTJDK --disable-debug --disable-dependency-tracking make all export BOOTJDK=$(pwd)/build/*/jdk - 用OpenJDK 8构建目标版本(如OpenJDK 17):
cd .. git clone https://github.com/openjdk/jdk17.git cd jdk17 ./configure --with-boot-jdk=$BOOTJDK --disable-debug --disable-dependency-tracking --with-jvm-variants=server make all
关键说明
- 不同OpenJDK版本的configure参数存在差异,需参考对应版本的
BUILDING.md调整 - RHEL 9默认仓库可能不含gcj,需启用codeready-builder仓库,或从gcc源码编译gcj以严格遵循规则
- Fedora官方的OpenJDK包正是采用这种自举模式,完全符合禁止预编译二进制的打包规范
内容的提问来源于stack exchange,提问作者Semyon
相关产品推荐
相关产品推荐

