在 Ubuntu 上写 Java,真正容易出问题的往往不是语法本身,而是编译阶段的参数没配对:比如 -source 和 -target 不一致、源码编码没显式指定、依赖路径写错位置。这篇文章按实际使用顺序,把 javac 的常用参数、单次编译写法以及全局默认配置方法整理清楚,读完你可以直接判断自己该用哪组命令、哪些参数必须显式写上。
先确认 Ubuntu 上的 JDK 已安装
正式配置 javac 参数前,先确保系统里已经装好 JDK。Ubuntu 下最省事的方式通常是通过 apt 安装 OpenJDK,文中示例使用的是 OpenJDK 11:
sudo apt update && sudo apt install openjdk-11-jdk
安装完成后,建议分别检查运行环境和编译器是否可用:
java -version
javac -version
如果这两个命令都能正常输出版本信息,说明 Java 运行时和编译工具已经就位,后面的参数配置才有基础。
Ubuntu 下最常用的 javac 编译参数
javac 参数并不少,但日常开发高频用到的通常就集中在版本、编码、依赖路径和输出目录这四类。

1. 版本兼容:-source 和 -target
-source <版本> 用来指定源代码允许使用的语法版本,例如 -source 1.8 表示按 Java 8 语法编译。
-target <版本> 用来指定生成的字节码目标版本,例如 -target 1.8 表示输出的 .class 文件面向 Java 8 运行环境。
这两个参数通常需要配套使用,而且最好保持一致。比如都写成 1.8,可以减少语法特性和目标字节码版本不匹配带来的问题。
2. 编码设置:-encoding UTF-8
-encoding <编码格式> 用于指定源文件编码。实际开发中,最稳妥的做法是始终显式写成:
-encoding UTF-8
尤其当源码里包含中文注释、中文字符串,或者项目需要跨 Linux、Windows 协作时,这个参数几乎应该视为必选项。否则编译器会依赖系统默认编码,容易出现乱码。
3. 依赖路径:-classpath 或 -cp
-classpath <路径> 或简写 -cp <路径>,作用是告诉编译器去哪里找依赖的 jar 包或类文件。
如果有多个依赖路径,在 Ubuntu 这类 Linux 环境下通常使用冒号分隔,例如:
-cp ./lib/commons.jar:./lib/log4j.jar
这里配置的是“编译时要查找的依赖位置”,不是编译结果的输出目录,这一点很容易混淆。
4. 输出目录:-d
-d <目录> 用于指定编译后的 .class 文件输出到哪里,例如:
-d ./out
设置后,编译结果会按包结构写入 out 目录,便于后续运行、打包或清理。
单次编译时怎么组合这些参数
如果只是编译单个文件或少量源文件,直接在命令行里把参数写全就可以。
一个基础示例如下:
javac -source 1.8 -target 1.8 -encoding UTF-8 -d ./out HelloWorld.java
这条命令完成了几件事:
- 按 Java 8 语法编译;
- 生成面向 Java 8 的字节码;
- 显式指定源码编码为 UTF-8;
- 把输出结果放到
./out。
如果源文件依赖外部库,比如 lib.jar,则需要补上 -cp:
javac -source 1.8 -target 1.8 -encoding UTF-8 -cp lib.jar -d ./out HelloWorld.java
这里要特别区分两个位置:
-cp指向的是编译时依赖;-d控制的是编译输出位置。
很多“找不到类”或“输出目录不对”的问题,基本都出在把这两者混为一谈。
不想每次都手写?可以配置全局默认参数
如果你经常在终端里直接调用 javac,每次都输入一长串参数确实麻烦。比较直接的做法,是在 Shell 配置文件里设置环境变量和别名,让编译命令默认带上常用参数。

编辑 Shell 配置文件
Bash 用户可以编辑 ~/.bashrc,Zsh 用户则编辑 ~/.zshrc。例如:
nano ~/.bashrc
追加 JDK 路径与 javac 别名
在文件末尾加入以下内容:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际JDK路径修改
export PATH=$JAVA_HOME/bin:$PATH
alias javac='javac -source 1.8 -target 1.8 -encoding UTF-8' # 默认编译参数
其中 JAVA_HOME 需要按本机实际安装路径调整,别名部分则把最常用的三个参数固定下来。
让配置立即生效
保存后执行:
source ~/.bashrc
如果你改的是 ~/.zshrc,就执行:
source ~/.zshrc
此后再输入下面这类命令时:
javac HelloWorld.java
终端会自动带上 -source 1.8 -target 1.8 -encoding UTF-8。如果某次需要临时调整版本,也可以继续显式追加参数,例如:
javac -source 11 HelloWorld.java
这种写法适合个人终端习惯配置,但如果你在团队项目、脚本或 CI 环境中工作,仍然建议把参数明确写进构建命令,而不是只依赖本地别名。
几个最容易踩坑的地方
版本参数尽量保持一致
-source 和 -target 最好使用相同版本,例如都设为 1.8。如果 -source 设成 11,而 -target 仍是 1.8,就可能出现语法特性和目标运行环境不一致的问题,最终在运行阶段暴露错误。
UTF-8 最好始终显式声明
很多乱码问题并不是代码写错,而是编译时默认编码不同。把 -encoding UTF-8 固定下来,通常能省掉大量排查时间。
依赖多了就别手动维护 -cp
当项目依赖越来越多时,手工维护 -cp 会迅速变得难用。此时更合适的做法是交给 Maven 或 Gradle 处理,它们可以统一管理依赖、编译参数和构建流程。
结语
如果你只是想把 Ubuntu 下的 Java 编译流程先跑通,优先记住这几件事:先确认 JDK 安装无误,单次编译时把 -source、-target、-encoding UTF-8 和 -d 写清楚;需要依赖时再补 -cp。等到你频繁重复同一套命令,再考虑通过 ~/.bashrc 或 ~/.zshrc 配置默认参数。







