Ubuntu 编译 OpenJDK 的依赖清单与版本要点
一、通用基础依赖
- 构建工具与基础编译链:build-essential、gcc、g++、make、autoconf、zip
- 字体与图形渲染:libfreetype6-dev、libfontconfig1-dev
- 打印系统:libcups2-dev
- X11 相关(窗口系统、渲染、测试等):libx11-dev、libxext-dev、libxrender-dev、libxrandr-dev、libxtst-dev、libxt-dev
- 音频:libasound2-dev
- 外部函数接口与兼容性:libffi-dev
- 源码获取工具(OpenJDK 使用 Mercurial):mercurial
以上为多数 OpenJDK 版本在 Ubuntu 上编译的通用依赖,能覆盖 HotSpot 与 AWT/Font/打印等模块所需库。
二、按 OpenJDK 版本的差异化要点
- OpenJDK 7
- Bootstrap JDK:需 JDK 7(不能用 JDK 8 编译 JDK 7)
- 构建工具:建议 Ant 1.9.x(Ant 1.10+ 需要 JDK 8)
- 其他常见依赖:gawk、m4、ca-certificates、ca-certificates-java
- OpenJDK 8
- Bootstrap JDK:需 JDK 7
- 常见依赖:libx11-dev、libxext-dev、libxrender-dev、libxtst-dev、libxt-dev、libcups2-dev、libfreetype6-dev、libasound2-dev
- OpenJDK 11/12/16 等更高版本
- Bootstrap JDK:需 JDK N-1(如编译 JDK 12 用 JDK 11;编译 JDK 16 用 JDK 15)
- 常见依赖:在通用依赖基础上,确保 libfreetype6-dev、libfontconfig1-dev、libcups2-dev、X11 系列、libasound2-dev、libffi-dev、autoconf 已安装
以上版本要点与示例命令可参考各版本的实践记录与配置说明。
三、一键安装示例命令
- Ubuntu 18.04/20.04/22.04(通用,适合 JDK 11+)
- sudo apt-get update
- sudo apt-get install -y build-essential autoconf zip libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libfontconfig1-dev libasound2-dev libffi-dev mercurial
- 如需编译 OpenJDK 7,在上述基础上补充:gawk m4 ant-1.9.x ca-certificates ca-certificates-java
- 如需编译 OpenJDK 8,确保已安装 JDK 7 作为 Bootstrap JDK(可通过 apt 安装 openjdk-7-jdk 或手动解压并设置 JAVA_HOME)
四、配置与排错要点
- 使用 configure 明确依赖路径(常见为 FreeType)
- bash configure --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu
- 指定 Bootstrap JDK(示例)
- bash configure --with-boot-jdk=/usr/lib/jvm/java-11-openjdk-amd64
- 常见报错与处理
- “freetype not found” → 安装 libfreetype6-dev 并在 configure 中正确设置 include/lib 路径
- “fontconfig missing” → 安装 libfontconfig1-dev
- “X11/xtst/xt missing” → 安装对应的 libx11-dev、libxtst-dev、libxt-dev 等
- “configure: error: Could not find a valid Boot JDK” → 安装并指向 JDK N-1
- “Ant version too new for JDK 7” → 使用 Ant 1.9.x 编译 JDK 7
- “sanity check failed” → 检查 LANG、JAVA_HOME/CLASSPATH 清理、依赖是否齐全
以上 configure 参数与排错经验来自多版本的实际编译记录。