В моем загрузочном приложении Spring:
- есть сторонний jar, который содержит более старую версию библиотеки javax.validation
- существует также библиотека Spring boot default javax.validation (1.1.0.Final), которая поставляется с hibernate-validator (5.3.5.Final)
Мой код строится правильно. Однако при запуске происходит сбой со следующей ошибкой:
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:146)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:331)
at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:305)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$ValidatedLocalValidatorFactoryBean.<init>(ConfigurationPropertiesBindingPostProcessor.java:412)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.getValidator(ConfigurationPropertiesBindingPostProcessor.java:368)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.determineValidator(ConfigurationPropertiesBindingPostProcessor.java:352)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:314)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
... 63 more
Из журнала видно, что метод ConfigurationState.getParameterNameProvider()
не найден, и это связано с конфликтом между версиями API проверки. Я знаю, что Hibernate-validator нуждается в новой версии validation-api (1.1.0), но Spring каким-то образом подбирает более старую версию классов validation-api, которые присутствуют в сторонней банке.
Я не могу удалить старую версию классов validation-api из моего процесса сборки, так как они встроены в jar сторонних, которые мне нужны для других целей.
Пробовал пару вариантов:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration
а также
spring.jpa.properties.javax.persistence.validation.mode=none
в application.properties
, но ни один из них не работал.
Есть ли способ при загрузке Spring отключить buildValidatorFactory
или LocalValidatorFactoryBean
, чтобы избежать этой ошибки?
@EnableAutoConfiguration(exclude=buildValidatorFactory.class)
или@SpringBootApplication(exclude = buildValidatorFactory.class)
и посмотрите, имеет ли это значение - person Maurice   schedule 12.08.2018@SpringBootApplication(exclude=ConfigurationImpl.class) @SpringBootApplication(exclude=HibernateValidator.class) @SpringBootApplication(exclude=LocalValidatorFactoryBean.class)
Пробовал все вышеперечисленные варианты, но никаких изменений в поведении. Пробовал те же классы с@EnableAutoConfiguration
, но без изменений. - person user7434698   schedule 13.08.2018pom
. - person Meziane   schedule 14.06.2019