很多人在 Ubuntu 下手动编译 Java 文件时,默认会把 .class 生成在当前目录,项目一多就会显得很乱。要把编译结果单独放到指定目录,其实只需要用好 javac 的 -d 选项;本文按实际操作顺序说明命令该怎么写、输出目录会发生什么变化,以及包结构为什么必须对齐,方便你在小项目和排查编译问题时快速判断。
核心方法:用 -d 指定编译输出目录
在 Ubuntu 环境下,修改 Java 编译后的输出目录,核心就是 javac 命令的 -d 选项。它的作用很直接:把编译生成的 .class 文件输出到你指定的位置,而不是留在当前源码目录里。
如果你只是想快速完成一次手动编译,记住这一条命令规则就够了:
javac -d 输出目录 源文件
Ubuntu 下的实际操作示例
先打开终端,切换到 Java 源代码所在目录。假设源码位于 /home/username/java_project/src,可以执行:

cd /home/username/java_project/src
然后使用 javac 编译,并通过 -d 指定输出目录。如果希望把编译后的 .class 文件放到 /home/username/java_project/bin,命令如下:
javac -d /home/username/java_project/bin *.java
这里的含义是:把 src 目录下匹配到的所有 *.java 文件编译后,统一输出到 bin 目录。
执行后会发生什么
命令执行完成后,编译生成的类文件不会留在源码目录,而是进入你指定的输出路径。若 bin 目录原本不存在,javac 会自动创建对应目录,这一点在日常使用里比较省事。
为什么输出目录要和包结构对应
-d 只负责指定编译输出的根目录,但类文件最终放在哪一层,还要看源码里的包声明。也就是说,输出目录最好与项目包结构保持一致,否则后续运行或配置 classpath 时很容易出问题。

例如,如果类定义在 com.example 包中,那么编译结果通常应该落在这样的路径中:
bin/com/example
这不是可有可无的小细节,而是 Java 按包名组织类文件的基本规则。路径和包声明不一致时,运行阶段就可能出现找不到类的问题。
常见误区与排查判断
如果你已经使用了 javac -d,但程序运行时仍提示类无法找到,优先检查两件事:
- 源码中的
package声明是否正确; - 输出目录下是否按包名生成了对应层级目录。
对于手动编译的小型项目来说,源码放在 src,编译输出放在 bin,并确保包路径自然展开,通常就是最省心的做法。养成这个习惯后,很多看起来像环境问题的 classpath 异常,其实都能提前避开。







