在 Ubuntu 上编译 Java 报错的原因有很多,下面按最常见的情况给你梳理一下,你可以对照看看是哪一种。
Java 编译需要 JDK,不是 JRE。
检查:
java -version
javac -version
如果 javac 提示 command not found,说明没装 JDK。
解决:
sudo apt update
sudo apt install openjdk-17-jdk
即使装了 JDK,也可能找不到 javac。
检查:
which javac
echo $JAVA_HOME
解决(示例,JDK 17):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
永久生效:
nano ~/.bashrc
# 加到最后
source ~/.bashrc
Java 规定:
public class的名字必须和文件名一致
错误示例:
// 文件:Test.java
public class Hello {
}
编译会报错:
class Hello is public, should be declared in a file named Hello.java
✅ 解决:
Hello.javapublic 去掉Ubuntu 下虽然支持,但某些老项目会炸。
建议:
~/java/test/Hello.java
报错类似:
unmappable character for encoding ASCII
解决:
javac -encoding UTF-8 Hello.java
比如文件里有:
package com.demo;
但你直接在根目录编译:
javac Hello.java
✅ 正确方式:
javac com/demo/Hello.java
# 或
javac -d . com/demo/Hello.java
update-alternatives --config java
update-alternatives --config javac
选同一个版本。
如果你愿意,把完整的报错信息贴出来,比如:
javac Hello.java
Hello.java:3: error: ';' expected
或者截图也行,我可以直接帮你定位 是哪一行、为什么错。
javac如果你愿意,告诉我:
我可以直接给你精确解决方案。