Closed
Description
We have a native application pulling jakarta.validation:jakarta.validation-api
as a transitive dependency but not using Validation.
And the following failure appears during processAot
task for Spring Boot 3.0.3 and 3.0.4, but not 3.0.2
~/...//spring-cloud-gateway-k8s >>> ./gradlew :scg-operator:processAot
> Task :scg-operator:processAot
2023-03-16T10:54:24.913+01:00 INFO 99554 --- [ main] c.v.t.s.OperatorApplication : Starting OperatorApplication using Java 17.0.6 with PID 99554 (/Users////spring-cloud-gateway-k8s/scg-operator/build/classes/java/main started by in /Users//work/code/spring-cloud-gateway-k8s/scg-operator)
Exception in thread "main" java.lang.ExceptionInInitializerErrorc.v.t.s.OperatorApplication : No active profile set, falling back to 1 default profile: "default"
at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor.processAheadOfTime(BeanValidationBeanRegistrationAotProcessor.java:59)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGeneratorFactory.getAotContributions(BeanDefinitionMethodGeneratorFactory.java:151)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGeneratorFactory.getBeanDefinitionMethodGenerator(BeanDefinitionMethodGeneratorFactory.java:99)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGeneratorFactory.getBeanDefinitionMethodGenerator(BeanDefinitionMethodGeneratorFactory.java:115)
at org.springframework.beans.factory.aot.BeanRegistrationsAotProcessor.processAheadOfTime(BeanRegistrationsAotProcessor.java:48)
at org.springframework.beans.factory.aot.BeanRegistrationsAotProcessor.processAheadOfTime(BeanRegistrationsAotProcessor.java:36)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.getContributions(BeanFactoryInitializationAotContributions.java:67)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.<init>(BeanFactoryInitializationAotContributions.java:49)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.<init>(BeanFactoryInitializationAotContributions.java:44)
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)
Caused by: jakarta.validation.NoProviderFoundException: Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
at jakarta.validation.Validation$GenericBootstrapImpl.configure(Validation.java:291)
at jakarta.validation.Validation.buildDefaultValidatorFactory(Validation.java:103)
at org.springframework.validation.beanvalidation.BeanValidationBeanRegistrationAotProcessor$BeanValidationDelegate.<clinit>(BeanValidationBeanRegistrationAotProcessor.java:66)
... 17 more
It seems BeanValidationBeanRegistrationAotProcessor
is too strict and while having the API without implementation is not useful I don't think is a common case when dealing with third-party dependencies (in this case io.swagger.core.v3:swagger-core
).
Current workarounds:
- Excluding
exclude (group: 'jakarta.validation', module: 'jakarta.validation-api')
completely - Adding
implementation 'org.springframework.boot:spring-boot-starter-validation'