You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

添加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. 验证测试类的注解依赖是否完整

你的测试类用到了TransactionDbUnitTestExecutionListenerDbUnitTestExecutionListener,要确保这些类对应的DbUnit依赖已经正确引入到项目中。如果这些依赖缺失,会导致Spring在解析测试类注解时找不到对应的类型,而Lombok的编译处理会让这个错误以TypeNotPresentExceptionProxy的形式表现出来。


如果以上方法都没解决,可以试试给测试运行添加JVM参数-verbose:class,查看类加载的详细日志,就能明确看到到底是哪个类找不到,从而定位问题根源。

内容的提问来源于stack exchange,提问作者Nunyet Calçada

火山引擎 最新活动