如何使用分文件夹存放的多个Java文件并解决javac编译报错问题
问题根因
- Java的包机制要求包名和实际目录层级完全对应,编译、运行时的classpath需要指向包结构的根目录,而非包对应的子目录。
- 你之前的编译命令存在两个错误:一是classpath指向了
sth子目录而非根目录,二是没有把两个关联的Java文件同时纳入编译,javac找不到another_one类的定义。
操作步骤
你的包结构根目录为C:\Users\Admin\Desktop\test\java,根目录下存在program(存放main.java)、sth(存放another_one.java)两个子目录,按以下顺序操作即可:
- 切换CMD路径到包结构根目录:
cd C:\Users\Admin\Desktop\test\java - 同时编译两个Java文件:
javac program/main.java sth/another_one.java
编译完成后,会分别在program目录下生成main.class、sth目录下生成another_one.class。 - 运行时指定全限定类名(包名+类名):
java program.main
运行后会正常输出:
From another one main
补充说明
- 如果你需要分开编译两个文件,先编译被依赖的类:在根目录执行
javac sth/another_one.java,再执行javac -cp . program/main.java即可,-cp .的作用是把当前根目录加入类路径,让javac可以找到sth包下的类。 - 建议遵循Java命名规范,类名首字母大写,例如
Main、AnotherOne,避免后续出现兼容问题。
内容的提问来源于stack exchange,提问作者Đăng Khôi
相关产品推荐
相关产品推荐

