在 CentOS 上编译 Java(无论是编译 Java 源码 还是 OpenJDK 本身),常见注意点如下,按使用场景整理:
java -version
javac -version
如果没有 javac:
sudo yum install java-1.8.0-openjdk-devel
# 或
sudo yum install java-11-openjdk-devel
✅ 注意:
java 是运行时javac 在 devel 包中CentOS 默认不一定是 UTF-8:
echo $LANG
建议设置:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
编译时指定编码:
javac -encoding UTF-8 *.java
javac -J-Xmx512m *.java
如果项目指定版本:
sudo alternatives --config java
这是 CentOS 上最容易踩坑的地方。
sudo yum groupinstall "Development Tools"
sudo yum install \
autoconf \
freetype-devel \
cups-devel \
libXtst-devel \
libXt-devel \
libXrender-devel \
libXrandr-devel \
libXi-devel \
alsa-lib-devel \
make \
gcc \
gcc-c++
⚠️ 编译 JDK N,需要已有 JDK N-1
例如:
sudo yum install java-11-openjdk-devel
bash configure
常见错误:
Boot JDK not foundC compiler cannot create executablesfreetype not found解决办法:
sudo yum install freetype-devel
或指定路径:
bash configure --with-boot-jdk=/usr/lib/jvm/java-11
make images
或:
make CONF=linux-x86_64-server-release
编译 OpenJDK 建议:
否则会报:
GC overhead limit exceeded
| 系统 | 注意点 |
|---|---|
| CentOS 7 | gcc 版本低,建议 devtoolset |
| CentOS 8 | 已 EOL,需换镜像 |
| CentOS Stream | 较新,坑少 |
CentOS 7 升级 gcc:
sudo yum install centos-release-scl
sudo yum install devtoolset-11
scl enable devtoolset-11 bash
/root 编译/opt 或 ~/jdkchmod -R 755 jdk_source
| 错误 | 原因 |
|---|---|
javac: command not found |
没装 devel |
| 中文乱码 | LANG / encoding |
UnsupportedClassVersionError |
Java 版本不一致 |
| make 失败 | 内存不足 |
| configure 失败 | 依赖不全 |
✅ 生产环境
➡ 直接用官方 JDK,不要自己编译
✅ 学习 / JVM 研究
➡ 推荐 Ubuntu / WSL,比 CentOS 省事
如果你能具体说明:
我可以给你 精确到命令级 的解决方案。