在 Centos 7 上编译 OpenJDK 23

目的

希望在 JDK 源码中添加自己的中文注释,方便对学习过程进行记录。

其中遇到的错误主要有BootJDK的版本问题和字符编码问题,没有去调查哪些版本是兼容的,本文主要处理字符编码问题。

操作环境

组件版本操作系统Centos 7待编译 JDK 的源码OpenJDK 23Boot JDKOpenJDK 21

操作步骤

下载 JDK 源码和 BootJDK

# 下载OpenJDK源码(需要编译的版本)

wget https://codeload.github.com/openjdk/jdk/zip/refs/tags/jdk-23%2B12

# 下载编译好的OpenJDK作为BootJDK

wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz

下载后,对其进行解压,zip 格式使用 unzip 命令,tar 格式使用 tar 命令。没有相关工具则使用 yum install -y 进行安装 。

假设解压完成后的目录分别为 jdk (待编译目录)和 jdk-21.0.2(BootJDK目录),之后操作涉及的步骤到在 jdk 目录中,和 jdk-21.0.2 无关。

更新 gcc 版本

gcc 的默认版本太低,需要进行更新

gcc -v & \

yum install centos-release-scl -y & \

yum install devtoolset-8-gcc* -y & \

scl enable devtoolset-8 bash & \

gcc -v

其中 scl enable devtoolset-8 bash 只在当前命令行生效,每次重启 bash 都需要再次执行该命令。如果需要永久生效,可以设置环境变量,也可以替换掉 /usr/bin/gcc 对应的软连接

安装C.UTF-8编码集(Centos 7)

localedef -v -c -i en_US -f UTF-8 C.UTF-8

安装该编码集后,确实不再出现警告信息,但依然无法对文件中存在的中文字符进行正确编译。

修改 encoding

这里通过 IDEA 的 Deployment 功能,对 Linux 服务器上的 jdk 目录做一个映射,然后将其下载到 Windows 本地系统中,方便使用 IDEA 工具进行修改。

通过 ctrl + shift + r 查找 encoding ascii,修改其中一个文件(JavaCompilation.gmk)为 encoding utf-8 成功编译带中文注释的 jdk,虽然成功编译,但是最终的生成的images中并没有中文注释,似乎被忽略了一样。修改所有的 encoding ascii 为 encoding utf-8,最终成功实现带中文注释的编译

配置和编译

在 jdk 目录下执行下面命令,前面的 yum install xxx 只是安装一些可能没有安装的工具,关键在 sh configure 和 make。

注意 --with-boot-jdk 指定自己的 BootJDK 所在的文件路径

yum groupinstall "Development Tools" -y & \

yum install freetype-devel -y & \

yum install fontconfig-devel -y & \

yum install cups-devel -y & \

yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel -y & \

yum install alsa-lib-devel -y & \

yum install libffi-devel -y & \

yum install autoconf -y & \

sh configure --with-boot-jdk=/opt/module/jdk-21.0.2 & \

make images

最终编译结果为 jdk/build/linux-x86_64-xxx/images/jdk,剩下只需要在其它项目中指定该路径为 JAVA_HOME 即可。

其它

即使通过 IDEA 中的 Deployment 功能进行映射,但是 jdk 项目中的代码并没有高亮,也没有类和类之间的代码跳转。

另外,jdk 项目本身不能够指定另一个编译好的 JDK,否则会出现包名冲突。

解决这个问题的办法是,通过右键 Mark Directory as Sources Root,最终效果如下。

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。