You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.0.5 processAot任务报错排查求助

问题排查:Spring Boot 3.0.5 + Graal Native 执行processAot任务报错java.lang.IllegalArgumentException: invalid type parameter: void

问题描述

将应用升级至Spring Boot 3.0.5并适配Graal Native,执行processAot任务时触发java.lang.IllegalArgumentException: invalid type parameter: void错误。已尝试更新/移除相关依赖、添加--stacktrace和--debug参数,但仍无法定位具体出错方法,需精准排查方案。

报错堆栈信息

Task :app:processAot
12:04:29.496 [main] DEBUG reactor.util.Loggers -- 使用Slf4j日志框架
2023-04-11 12:04:30.250 INFO  app=security-token-service, traceId=, spanId=, t=background-preinit, class=org.hibernate.validator.internal.util.Version, HV000001: Hibernate Validator 8.0.0.Final 

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)

2023-04-11 12:04:30.335 INFO  app=security-token-service, traceId=, spanId=, t=main, class=s.token.service.SecurityTokenServiceApplicationKt, 正在使用Java 17.0.6启动SecurityTokenServiceApplicationKt,PID为71943(启动路径:/Users/rgfirmino/workspace/security-token-service/app/build/classes/kotlin/main,启动用户rgfirmino,工作目录:/Users/rgfirmino/workspace/security-token-service/app)
2023-04-11 12:04:30.337 INFO  app=security-token-service, traceId=, spanId=, t=main, class=s.token.service.SecurityTokenServiceApplicationKt, 未设置激活配置文件,默认使用"default"配置文件
Exception in thread "main" java.lang.IllegalArgumentException: invalid type parameter: void
        at org.springframework.javapoet.Util.checkArgument(Util.java:53)
        at org.springframework.javapoet.ParameterizedTypeName.<init>(ParameterizedTypeName.java:51)
        at org.springframework.javapoet.ParameterizedTypeName.<init>(ParameterizedTypeName.java:38)
        at org.springframework.javapoet.ParameterizedTypeName.get(ParameterizedTypeName.java:119)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.buildGetInstanceMethodForFactoryMethod(InstanceSupplierCodeGenerator.java:257)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.lambda$generateCodeForAccessibleFactoryMethod$2(InstanceSupplierCodeGenerator.java:228)
        at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.generateGetInstanceSupplierMethod(InstanceSupplierCodeGenerator.java:331)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.generateCodeForAccessibleFactoryMethod(InstanceSupplierCodeGenerator.java:227)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.generateCodeForFactoryMethod(InstanceSupplierCodeGenerator.java:206)
        at org.springframework.beans.factory.aot.InstanceSupplierCodeGenerator.generateCode(InstanceSupplierCodeGenerator.java:98)
        at org.springframework.beans.factory.aot.DefaultBeanRegistrationCodeFragments.generateInstanceSupplierCode(DefaultBeanRegistrationCodeFragments.java:206)
        at org.springframework.beans.factory.aot.BeanRegistrationCodeGenerator.generateCode(BeanRegistrationCodeGenerator.java:89)
        at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.lambda$generateBeanDefinitionMethod$3(BeanDefinitionMethodGenerator.java:194)
        at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
        at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:188)
        at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:109)
        at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$generateRegisterBeanDefinitionsMethod$2(BeanRegistrationsAotContribution.java:85)
        at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
        at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.generateRegisterBeanDefinitionsMethod(BeanRegistrationsAotContribution.java:83)
        at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$applyTo$1(BeanRegistrationsAotContribution.java:67)
        at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
        at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
        at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.applyTo(BeanRegistrationsAotContribution.java:66)
        at org.springframework.context.aot.BeanFactoryInitializationAotContributions.applyTo(BeanFactoryInitializationAotContributions.java:78)
        at org.springframework.context.aot.ApplicationContextAotGenerator.lambda$processAheadOfTime$0(ApplicationContextAotGenerator.java:58)
        at org.springframework.context.aot.ApplicationContextAotGenerator.withCglibClassHandler(ApplicationContextAotGenerator.java:67)
        at org.springframework.context.aot.ApplicationContextAotGenerator.processAheadOfTime(ApplicationContextAotGenerator.java:53)
        at org.springframework.context.aot.ContextAotProcessor.performAotProcessing(ContextAotProcessor.java:106)
        at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:84)
        at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:49)
        at org.springframework.context.aot.AbstractAotProcessor.process(AbstractAotProcessor.java:82)
        at org.springframework.boot.SpringApplicationAotProcessor.main(SpringApplicationAotProcessor.java:80)

> Task :app:processAot FAILED

排查方案

1. 定位出错的工厂方法

从堆栈可知,错误发生在Spring AOT生成工厂方法实例代码时,传入了void作为泛型参数。需找出对应问题Bean:

  • 添加--info参数执行任务,查看Bean注册的详细日志,重点关注工厂方法相关的Bean
  • 排查所有自定义@Bean方法,尤其是返回类型为void或泛型参数包含void的方法(比如错误定义Supplier<Void>类型的Bean)
  • 检查第三方依赖中的Bean定义,是否存在返回void的工厂方法

2. 逐步简化配置定位问题

  • 临时注释非核心Bean配置,逐个恢复,找到触发错误的Bean
  • 移除所有自定义AOT相关配置或处理器,确认是否为自定义代码导致问题

3. 检查Kotlin代码特殊情况

项目基于Kotlin开发,需注意:

  • Kotlin的Unit类型对应Java的void,检查是否有Bean方法返回Unit,被Spring AOT处理时误判为void泛型参数
  • 排查Kotlin扩展函数、委托Bean是否存在异常返回类型定义

4. 验证依赖兼容性

  • 确保所有依赖版本与Spring Boot 3.0.5兼容(可通过Spring Boot Dependency Management确认)
  • 重点检查Hibernate Validator、Reactor等依赖版本是否适配Spring Boot 3.0.x和Graal Native

内容的提问来源于stack exchange,提问作者Rafael Firmino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:42:56