在IntelliJ中运行测试时触发ClassNotFoundException,Maven POM已配置Checker Framework
嘿,我之前也碰到过一模一样的问题,折腾了好一会儿才搞定,给你分享几个排查方向:
检查Maven依赖范围是否正确
有时候你可能把Checker Framework的依赖设成了provided或者仅test范围,导致编译测试代码时找不到处理器类。建议调整依赖配置,确保checker-qual是compile范围,checker至少覆盖test阶段:<dependency> <groupId>org.checkerframework</groupId> <artifactId>checker-qual</artifactId> <version>你的具体版本号</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.checkerframework</groupId> <artifactId>checker</artifactId> <version>你的具体版本号</version> <scope>test</scope> </dependency>强制IntelliJ同步Maven依赖并清理缓存
IntelliJ有时候会抽风,没把Maven依赖正确同步过来。试试这两步:- 点击右侧Maven面板的「Reload All Maven Projects」按钮,刷新依赖
- 执行
File → Invalidate Caches...,勾选「Clear file system cache and local history」后重启IntelliJ,很多缓存导致的奇怪问题都能这么解决
确认注解处理器在IntelliJ中已启用
打开Settings → Build, Execution, Deployment → Compiler → Annotation Processors,确保:- 勾选了
Enable annotation processing - 「Processor path」里能看到Checker Framework的相关jar包,如果没有,手动添加本地Maven仓库里的
checker-xxx.jar
- 勾选了
检查测试运行配置的类路径
打开你的测试Run Configuration,切换到「Classpath」标签页,确认Checker Framework的checker和checker-qualjar已经在类路径里。如果缺失,点击「Add」按钮找到对应的依赖jar添加进去。先用Maven命令验证编译是否正常
在终端执行mvn test-compile,如果这个命令能成功完成,说明Maven配置本身没问题,问题肯定出在IntelliJ的本地配置上,回到前面几步重新同步依赖、清理缓存就行。排查版本兼容性问题
如果以上都没用,可能是Checker Framework版本和你的JDK、IntelliJ版本不兼容。试试换成最新的稳定版Checker Framework,或者降级到和项目JDK匹配的版本(比如JDK 8对应Checker Framework 3.x系列,JDK 11+可以用4.x+)。
备注:内容来源于stack exchange,提问作者joseph

