在 Ubuntu 上执行 Java 编译时出错,很多时候并不是代码本身有大情况,而是开发环境里某个基础环节没有对上。下面按“先确认工具链,再看环境变量,最后检查代码与类路径”的顺序来排查,你可以更快判断情况出在系统配置、命令调用,还是项目依赖上。
先确认 JDK 和编译器是否可用
第一步先看系统里有没有正确安装 JDK,以及 java、javac 两个命令是否都能被识别。打开终端执行:

java -version
javac -version
如果终端提示 command not found,说明当前系统还没有可用的 Java 开发环境,或者命令没有进入 PATH。
在 Ubuntu 20.04 上,可以先安装 OpenJDK 11:
sudo apt update
sudo apt install openjdk-11-jdk
这里要注意,只有安装了 JDK,javac 才会存在;如果只装了 JRE,通常只能运行 Java 程序,不能编译源码。
已安装 JDK,但找不到 javac 怎么办
如果你确认装过 JDK,但终端里依然无法识别 javac,情况大多出在环境变量。常见情况是 JAVA_HOME 没配,或者 JDK 的 bin 目录没有加入 PATH。
可以打开 ~/.bashrc;如果你使用的是 Zsh,则修改 ~/.zshrc。假设 JDK 安装在 /usr/lib/jvm/java-11-openjdk-amd64,就在文件末尾加入:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
保存后执行下面的命令让配置立即生效:
source ~/.bashrc
如果你改的是 Zsh 配置文件,则执行:
source ~/.zshrc
完成后再重新运行 javac -version,看命令是否已经恢复正常。
编译报错时,先看清错误信息指向哪里
当 javac 已经能正常执行,但编译依然失败,就该把重点转到编译器输出本身。Java 编译器给出的报错通常比较直接,常见的方向包括:
- 语法错误,比如括号、分号、关键字写错;
- 变量或方法未定义;
- 类名与文件名不一致;
- 导包错误或引用了不存在的类。
这一步不要只看“编译失败”这几个字,而要盯住具体报错行号、类名和关键提示。很多情况其实在第一条错误信息里就已经说清楚了,后续一连串报错往往只是连带影响。
出现类路径或 ClassNotFoundException,重点检查 classpath
如果错误信息里提到“类路径”或 ClassNotFoundException,通常说明你的依赖包没有被正确加入 classpath。这个情况在手动编译、运行带外部 JAR 的程序时尤其常见。

编译和运行时都可以使用 -cp 或 -classpath 指定依赖路径,例如:
javac -cp .:/path/to/your/library.jar YourJavaFile.java
java -cp .:/path/to/your/library.jar YourJavaClass
这里的 . 表示当前目录,后面的 /path/to/your/library.jar 则是你的外部依赖包路径。只要其中一个路径写错,编译或运行都可能失败。
如果你已经使用 Maven 或 Gradle 管理项目,优先检查构建脚本和依赖声明;如果是手动命令行编译,就重点核对 JAR 文件是否真实存在、路径是否拼写正确,以及当前目录下是否确实有对应的 .java 或 .class 文件。
前面都试过仍无结果,再这样继续定位
如果 JDK、环境变量、源码和 classpath 都检查过,情况还是没有解决,下一步就不要盲猜了。更有效的做法是:
- 把完整错误信息原样复制出来,不要只截一句结论;
- 去查官方文档,确认当前 JDK 版本与命令、语法、依赖是否匹配;
- 把报错文本原样放进搜索引擎,很多常见情况都已有现成解法。
真正影响排查效率的,往往不是错误本身,而是信息不完整。只要能提供具体报错内容、Ubuntu 版本、JDK 版本,以及你执行的命令,定位就会准确得多。







