Tomcat运行Spring Web应用报org.junit.Test类找不到问题如何修复
错误根因
从报错栈可以看出,该问题是Spring JPA持久化单元管理器扫描应用类时,加载到了标注了org.junit.Test注解的类,而JUnit依赖默认的作用域为测试范围(test scope),正式环境打包时不会被打入WAR包,因此触发类找不到异常。该异常为WARN级别所以不会导致应用崩溃,只是会反复打印占用日志空间。
修复方案
- 优先检查打包配置
确认你的Maven/Gradle打包规则是否错误将src/test目录下的测试类打入了生产WAR包的WEB-INF/classes路径下,修正打包配置排除测试类即可解决90%以上的此类问题。 - 调整类扫描范围
如果你是手动配置了JPA的实体扫描@EntityScan或者Spring组件扫描@ComponentScan,可以新增过滤规则,排除标注了测试注解或者属于测试包路径的类,避免Spring扫描到测试类。 - 清理业务代码的测试注解
排查业务代码目录(src/main/java)下的类是否误加了@Test等JUnit相关注解,删除非测试类上的测试注解即可。 - 临时日志屏蔽(治标不治本,仅作应急用)
如果你暂时找不到触发问题的类,可以修改日志框架配置,将org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor类的日志级别调整为ERROR,即可屏蔽该WARN日志。 - (不推荐)修改JUnit依赖范围
如果你确认生产环境需要依赖JUnit相关类,可以将pom.xml/gradle配置中JUnit依赖的scope从test改为compile,打包时会将JUnit的jar包打入应用,也可以消除报错。
内容的提问来源于stack exchange,提问作者J.E.Y
相关产品推荐
相关产品推荐

