编译Java代码出现‘error: cannot find symbol’错误,求原因与解决
解决编译Welcome.java时的"cannot find symbol"错误
Hey,我来帮你捋清楚这个问题:你碰到的error: cannot find symbol,本质是Java编译器找不到Test类的定义,原因很简单——你的两个类分属不同包,编译时没告诉编译器去哪里找依赖的Test类。
问题原因
你的Welcome类在com.project包,Test类在com.code包。当你直接执行javac com/project/Welcome.java时,编译器只会在当前目录和系统默认类路径下查找依赖类,它不知道com.code包的位置,自然找不到Test这个符号。
正确的解决方法
你需要用-cp(-classpath的简写)参数给编译器指定类路径,告诉它去哪里找依赖类。这里有两种稳妥的方式:
方式1:一次性编译所有相关类
直接把两个类的文件都传给javac,同时指定类路径为当前目录(因为当前目录是包结构的根目录):
javac -cp . com/project/Welcome.java com/code/Test.java
方式2:先编译依赖类,再编译主类
先单独编译Test类,再编译Welcome类时指定类路径包含当前目录:
# 第一步:编译Test类 javac com/code/Test.java # 第二步:编译Welcome类,指定类路径为当前目录 javac -cp . com/project/Welcome.java
你提到的javac -cp com/code/* com/project/Welcome.java其实不是标准写法,com/code/*会匹配该目录下的文件,但编译器需要的是包含包结构的根目录(也就是当前目录.)。如果Test类已经编译完成,这个命令可能临时生效,但更规范的做法是用.作为类路径参数。
内容的提问来源于stack exchange,提问作者Martin.B




