I am encountering a StackOverflowError during native image generation in a Spring Boot application when I ran command mvn -Pnative spring-boot:build-image -DskipTests

The error seems related to recursive reflection calls in ReflectionUtils and BeanValidationBeanRegistrationAotProcessor.

Spring boot version 3.4.0

` 28-12-2024 12:10:11.575 [trace_id= span_id=] [background-preinit] INFO o.h.validator.internal.util.Version. - HV000001: Hibernate Validator 8.0.1.Final 28-12-2024 12:10:11.696 [trace_id= span_id=] [main] INFO c.m.c.u.UssdGatewayHandlerApplication.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default" 28-12-2024 12:10:13.686 [trace_id= span_id=] [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate.registerRepositoriesIn - Bootstrapping Spring Data JPA repositories in DEFAULT mode. 28-12-2024 12:10:13.849 [trace_id= span_id=] [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate.registerRepositoriesIn - Finished Spring Data repository scanning in 151 ms. Found 6 JPA repository interfaces. 28-12-2024 12:10:14.278 [trace_id= span_id=] [main] INFO o.s.cloud.context.scope.GenericScope.setSerializationId - BeanFactory id=c6237f6e-f066-3ae3-8ae0-bd87e5f7809b 28-12-2024 12:10:18.932 [trace_id= span_id=] [main] DEBUG o.s.v.b.BeanValidationBeanRegistrationAotProcessor.processAheadOfTime - Skipping validation constraint hint inference for class class org.springdoc.core.customizers.QuerydslPredicateOperationCustomizer due to a TypeNotPresentException at validator level: Type com.querydsl.core.types.Path not present Exception in thread "main" java.lang.StackOverflowError at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.checkReceiver(DirectMethodHandleAccessor.java:196) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:99) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281) at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:265) at org.springframework.core.SerializableTypeWrapper$MethodInvokeTypeProvider.getType(SerializableTypeWrapper.java:357) at org.springframework.core.SerializableTypeWrapper.forTypeProvider(SerializableTypeWrapper.java:106) at org.springframework.core.SerializableTypeWrapper$TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:215) at org.springframework.core.$Proxy8.getActualTypeArguments(Unknown Source) at org.springframework.core.ResolvableType.getGenerics(ResolvableType.java:809) at org.springframework.core.ResolvableType.getGeneric(ResolvableType.java:762) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:154) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) dOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:728) at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:707) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:150) at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.lambda$processAheadOfTime$0(BeanValidationBeanRegistrationAotProcessor.java:170) [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 18.312 s [INFO] Finished at: 2024-12-28T12:10:19+02:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.0:process-aot (process-aot) on project my-service: Process terminated with exit code: 1 -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Process finished with exit code 1 `

pom.xml.zip

Comment From: sbrannen

  • duplicate of #33936