Не могу использовать библиотеку с другой версией Spring Boot - PullRequest
1 голос
/ 23 апреля 2020

У меня есть старый основной проект, в котором я использую Spring Boot версии 1.3.5.RELEASE. В этом проекте я хотел бы использовать библиотеку, которую я написал. Библиотека использует Spring Boot версии 2.2.5.RELEASE.

Я использую Gradle в качестве инструмента для сборки. Проект работает нормально, но когда я пытаюсь запустить его, я получаю следующее сообщение об ошибке:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [hr.kapsch.npgw.NpgwReferenceDatabaseApplication]; nested exception is java.lang.IllegalStateException: Error processing condition on org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration$LegacyMetricRepositoryConfiguration
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:609)
    at org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:110)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:811)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:808)
    at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:779)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:192)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
    at hr.kapsch.npgw.NpgwReferenceDatabaseApplication.main(NpgwReferenceDatabaseApplication.java:10)
Caused by: java.lang.IllegalStateException: Error processing condition on org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration$LegacyMetricRepositoryConfiguration
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:225)
    at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:371)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:271)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:599)
    ... 19 common frames omitted
Caused by: java.lang.IllegalStateException: Attribute 'value' in annotation org.springframework.boot.autoconfigure.condition.ConditionalOnJava should be compatible with org.springframework.boot.system.JavaVersion but a org.springframework.boot.autoconfigure.condition.ConditionalOnJava$JavaVersion value was returned
    at org.springframework.core.annotation.TypeMappedAnnotation.adaptForAttribute(TypeMappedAnnotation.java:536)
    at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:461)
    at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:401)
    at org.springframework.core.annotation.TypeMappedAnnotation.asMap(TypeMappedAnnotation.java:286)
    at org.springframework.core.annotation.AbstractMergedAnnotation.asAnnotationAttributes(AbstractMergedAnnotation.java:193)
    at org.springframework.core.type.AnnotatedTypeMetadata.getAnnotationAttributes(AnnotatedTypeMetadata.java:106)
    at org.springframework.core.type.AnnotatedTypeMetadata.getAnnotationAttributes(AnnotatedTypeMetadata.java:81)
    at org.springframework.boot.autoconfigure.condition.OnJavaCondition.getMatchOutcome(OnJavaCondition.java:43)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
    ... 25 common frames omitted

Я пытался найти решение. Мне нигде не удалось найти точно такое же исключение, но из того, что я обнаружил, я подозреваю, что проблема в том, что версии Spring Boot в основном проекте и в библиотеке не совместимы. Я пытался найти информацию о совместимости различных версий Spring Boot, но не нашел ничего полезного.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Смешивание весенних версий не очень хорошая идея, так как это может привести к неожиданному поведению. По весне с новой версией появились новые классы et c. и использование более низкой версии приведет к NoSuchMethodError или ClassNotFoundException.

Это также может привести к некоторым непредсказуемым исключениям во время выполнения. Просто, чтобы избежать такого поведения, используйте совместимые и совместимые версии с загрузочной пружиной.

0 голосов
/ 24 апреля 2020

Тем временем я узнал о Семанти c версиях . Первый ди git релиза означает основной выпуск. Различные основные релизы не имеют обратной совместимости (в моем случае 1 и 2). Поэтому, чтобы использовать новую библиотеку со старым проектом, мне пришлось изменить версию Spring Boot в новой библиотеке на любую версию основного выпуска 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...