javac编译报cannot find symbol、运行找不到TestRunner类解决方法
问题排查与修复方案
单文件编译TestRunner.java报找不到符号
- 根因:
javac默认仅处理命令中显式传入的源文件,TestRunner代码中直接引用了CalculatorTest、UnitTest、Test三个自定义类,单文件编译时既未传入这三个类的源文件,也未提前将编译好的三个类加入类路径,编译器无法解析依赖,自然抛出符号找不到的错误。 - 正确编译操作:所有源文件同属默认包(无package声明)且在同一目录时,直接使用
javac *.java即可完成全量编译;如果项目规模扩大,可先编译公共依赖类,再通过-cp参数指定依赖路径编译主类。
全量编译成功后执行java TestRunner报找不到主类
该错误完全由类路径配置错误导致,按以下步骤修复即可:
- 确认执行命令的工作目录:先通过终端进入所有
.class文件实际存放的目录,执行目录查看命令(Windows用dir、macOS/Linux用ls)时能直接看到TestRunner.class文件,不要在源文件目录的上层路径或其他路径下执行运行命令。 - 排查类路径配置:如果系统手动配置过
CLASSPATH环境变量,必须将代表当前目录的.加入变量值,否则JVM不会默认扫描当前目录下的类文件。不想修改全局环境变量的话,运行时显式指定类路径即可:java -cp . TestRunner - 如果你的类声明了自定义包(源文件开头有
package xxx;语句),必须保证目录结构和包名完全对应,运行时使用全限定类名启动,例如类声明为package com.test;的话,要在包根目录执行java com.test.TestRunner。
额外代码缺陷提示:当前
TestRunner代码中对同一个测试方法连续执行了两次method.invoke(test),会导致所有标记了@Test注解的测试方法重复运行2次,删除其中一行调用语句即可修复。
内容的提问来源于stack exchange,提问作者Ebillson GRAND JEAN
相关产品推荐
相关产品推荐

