在 CentOS 上“编译不了 Java”通常不是 Java 本身的问题,而是环境、版本或命令使用不当导致的。下面按最常见原因 → 对应解决办法给你系统梳理一下。
| 现象 | 原因 |
|---|---|
javac: command not found |
没安装 JDK,只装了 JRE |
gcc: command not found |
你其实是在编译 C/C++,不是 Java |
java: command not found |
Java 没装或环境变量没配置 |
UnsupportedClassVersionError |
Java 版本不匹配 |
Permission denied |
没执行权限 |
| 编译成功但无法运行 | CLASSPATH / 包路径问题 |
javac Hello.java
java Hello
⚠️ 不要用 gcc / g++ 编译 Java
gcc Hello.java ❌
JRE 不能编译 Java
javac -version
如果提示:
bash: javac: command not found
yum install -y java-1.8.0-openjdk-devel
dnf install -y java-17-openjdk-devel
✅ 安装完成后:
javac -version
java -version
echo $JAVA_HOME
如果是空的,可以配置:
vi /etc/profile
添加(示例):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
生效:
source /etc/profile
update-alternatives --config java
update-alternatives --config javac
选择 同一个版本,否则会出现:
UnsupportedClassVersionError
CentOS 默认 UTF-8,但如果你在 Windows 写代码再拷贝:
javac Hello.java
可能报错:
error: unmappable character
✅ 解决:
javac -encoding UTF-8 Hello.java
chmod +x Hello.java
不过 java 文件不需要执行权限,只有 .class 和 java 执行需要。
package com.demo;
运行方式却错:
java Hello ❌
✅ 正确方式:
javac com/demo/Hello.java
java com.demo.Hello
java -version
javac -version
which java
which javac
echo $JAVA_HOME
如果这些有任何一个不正常,就先解决环境。
你可以直接贴出:
cat /etc/centos-release)我可以直接告诉你哪一步错了,怎么改。