同一包下编译Java类出现cannot find symbol错误求助
解决Java编译"cannot find symbol"找不到同包类的问题
问题原因
你虽然提前编译了Course.java,但在包对应的子目录下单独编译CourseController.java时,Java编译器会根据包名com.mjfirstSBv5.sprintboot.learnspringboot去层级匹配的目录里查找Course.class文件,而你编译生成的Course.class就在当前目录,不符合编译器的查找规则,因此出现找不到符号的错误。
解决方法
方法一:回到包根目录统一编译
- 切换到Java源码的根目录,也就是路径:
D:\AutoQA_Progress\intg-mock-service\learn-spring-boot\src\main\java - 执行以下命令一次性编译两个类:
javac com/mjfirstSBv5/sprintboot/learnspringboot/Course.java com/mjfirstSBv5/sprintboot/learnspringboot/CourseController.java
编译器会自动按照包结构生成对应层级目录,并将.class文件放入正确位置,后续就能正常识别同包类。
方法二:指定类路径在当前目录编译
如果不想切换目录,在com/mjfirstSBv5/sprintboot/learnspringboot目录下,编译CourseController.java时指定类路径为源码根目录:
javac -cp ../../../../../../ CourseController.java
这里的../../../../../../是从当前目录回到src/main/java的相对路径,能让编译器找到已编译的Course类文件。
额外提示
- 尽量避免在包的子目录下单独编译单个类,回到根目录统一编译更符合Java包结构规范。
- 后续使用IDE(如IntelliJ IDEA、Eclipse)开发时,这类编译问题会由IDE自动处理,无需手动执行
javac命令。
内容的提问来源于stack exchange,提问作者nick nick
相关产品推荐
相关产品推荐

