添加Lombok依赖后运行测试抛出TypeNotPresentExceptionProxy异常求助
解决添加Lombok依赖后测试抛出
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy的问题 这个异常我之前在多个项目里踩过坑,本质上是运行时JVM无法找到某个注解关联的类型,而Lombok在编译阶段修改类文件的特性,会把版本不兼容、编译配置错误这类问题放大,最终抛出这个看似奇怪的异常。结合你的测试类配置和堆栈信息,给你几个针对性的解决方案:
1. 优先排查Lombok与JDK、Spring的版本兼容性
Lombok对JDK和Spring版本的适配要求比较严格:
- 如果你用的是JDK 8,推荐用Lombok 1.18.20及以上版本;
- JDK 11+的话,至少要Lombok 1.18.22才能稳定支持;
- 要是你的项目还在用Spring 4.x这类老版本,建议搭配Lombok 1.16.x或者1.18早期版本(比如1.18.10),避免新Lombok的注解处理逻辑和老Spring的注解解析冲突。
2. 确保IDE的Lombok配置完全生效(针对IntelliJ IDEA)
很多时候这个问题是IDE编译和Lombok注解处理不同步导致的,按这几步检查:
- 打开
Settings > Plugins,确认Lombok插件已经安装并且处于启用状态; - 进入
Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing; - 最后执行
Build > Rebuild Project,彻底清理旧的编译产物,重新生成带Lombok处理的类文件。
3. 检查依赖配置,排除版本冲突
如果用Maven,先确认Lombok的依赖配置正确(注意scope设为provided,因为Lombok只在编译阶段生效):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>适配你的版本</version> <scope>provided</scope> </dependency>
然后运行mvn dependency:tree查看依赖树,看看有没有其他依赖偷偷引入了不同版本的Lombok,如果有,在对应依赖里加上<exclusions>排除掉冲突版本:
<exclusion> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclusion>
4. 验证测试类的注解依赖是否完整
你的测试类用到了TransactionDbUnitTestExecutionListener和DbUnitTestExecutionListener,要确保这些类对应的DbUnit依赖已经正确引入到项目中。如果这些依赖缺失,会导致Spring在解析测试类注解时找不到对应的类型,而Lombok的编译处理会让这个错误以TypeNotPresentExceptionProxy的形式表现出来。
如果以上方法都没解决,可以试试给测试运行添加JVM参数-verbose:class,查看类加载的详细日志,就能明确看到到底是哪个类找不到,从而定位问题根源。
内容的提问来源于stack exchange,提问作者Nunyet Calçada




