温馨提示×

Centos编译Java要注意什么

小樊
39
2026-08-30 20:19:23
栏目: 编程语言

CentOS 上编译 Java(无论是编译 Java 源码 还是 OpenJDK 本身),常见注意点如下,按使用场景整理:


一、编译 Java 程序(javac)注意事项

1. 确认 Java 环境

java -version
javac -version

如果没有 javac

sudo yum install java-1.8.0-openjdk-devel
# 或
sudo yum install java-11-openjdk-devel

注意

  • java 是运行时
  • javacdevel 包中

2. 字符编码问题(中文乱码)

CentOS 默认不一定是 UTF-8:

echo $LANG

建议设置:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

编译时指定编码:

javac -encoding UTF-8 *.java

3. 内存不足(服务器 1C1G 很常见)

javac -J-Xmx512m *.java

4. 版本问题

  • CentOS 7 默认是 Java 8
  • CentOS 8/Stream 默认是 Java 11+

如果项目指定版本:

sudo alternatives --config java

二、编译 OpenJDK(源码编译 JDK)注意事项(重点)

这是 CentOS 上最容易踩坑的地方。


1. 系统依赖(非常重要)

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++

2. 必须有一个 Boot JDK

⚠️ 编译 JDK N,需要已有 JDK N-1

例如:

  • 编译 JDK 11 → 需要 JDK 10
  • 编译 JDK 17 → 需要 JDK 16
sudo yum install java-11-openjdk-devel

3. configure 阶段常见错误

bash configure

常见错误:

  • Boot JDK not found
  • C compiler cannot create executables
  • freetype not found

解决办法:

sudo yum install freetype-devel

或指定路径:

bash configure --with-boot-jdk=/usr/lib/jvm/java-11

4. 编译参数建议

make images

或:

make CONF=linux-x86_64-server-release

5. 内存问题(非常常见)

编译 OpenJDK 建议:

  • 内存 ≥ 4GB
  • swap 至少 2GB

否则会报:

GC overhead limit exceeded

6. CentOS 版本差异

系统 注意点
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~/jdk
chmod -R 755 jdk_source

四、常见错误速查

错误 原因
javac: command not found 没装 devel
中文乱码 LANG / encoding
UnsupportedClassVersionError Java 版本不一致
make 失败 内存不足
configure 失败 依赖不全

五、建议

生产环境
➡ 直接用官方 JDK,不要自己编译

学习 / JVM 研究
➡ 推荐 Ubuntu / WSL,比 CentOS 省事


如果你能具体说明:

  • 编译 Java 程序 还是 编译 OpenJDK
  • CentOS 版本(7 / 8 / Stream)
  • 报错信息

我可以给你 精确到命令级 的解决方案。

0