Je me demande s'il existe une matrice de compatibilité entre Springboot et Springcloud?
J'ai créé un projet simple sur STS et je rencontre des problèmes de compatibilité.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Avoir une bonne vue des versions prises en charge de Springboot et Springcloud simplifiera les choses.
J'ai observé un problème ouvert qui parle de ce besoin - https://github.com/spring-cloud/spring-cloud-build/issues/4
La communauté a-t-elle une approche sur la façon dont elle choisit de commencer une combinaison de versions spécifique lorsqu'elle se lance dans un projet SpringCloud?
Edit: Ajout d'une autre instance d'un tel problème que j'ai rencontré depuis hier
extraits de pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<!--<version>1.5.2.RELEASE</version> -->
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!-- <version>Camden.SR6</version -->
<!-- <version>Brixton.SR5</version> -->
<!-- <version>Camden.SR6</version> -->
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Il n'y a aucune erreur maven dans l'utilisation de 1.5.2.RELEASE avec Camden.SR5, mais lorsque l'application démarre, elle lance la NoClassDefFoundError.
2017-03-28 09:51:15.148 ERROR 15808 --- [ main] o.s.boot.SpringApplication : Application startup failed
Java.lang.NoClassDefFoundError: org/springframework/cloud/context/named/NamedContextFactory$Specification
at Java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_112]
at Java.lang.ClassLoader.defineClass(ClassLoader.Java:763) ~[na:1.8.0_112]
at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142) ~[na:1.8.0_112]
at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:467) ~[na:1.8.0_112]
at Java.net.URLClassLoader.access$100(URLClassLoader.Java:73) ~[na:1.8.0_112]
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:368) ~[na:1.8.0_112]
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:362) ~[na:1.8.0_112]
at Java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_112]
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:361) ~[na:1.8.0_112]
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424) ~[na:1.8.0_112]
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:331) ~[na:1.8.0_112]
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357) ~[na:1.8.0_112]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerClientConfiguration(FeignClientsRegistrar.Java:367) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerDefaultConfiguration(FeignClientsRegistrar.Java:104) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.cloud.netflix.feign.FeignClientsRegistrar.registerBeanDefinitions(FeignClientsRegistrar.Java:87) ~[spring-cloud-netflix-core-1.2.5.RELEASE.jar:1.2.5.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.Java:352) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.Java:143) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.Java:116) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.Java:320) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.Java:228) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.Java:270) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.Java:93) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.Java:686) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:524) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.Java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at com.forecastessentials.school.SchoolUniformForecastApplication.main(SchoolUniformForecastApplication.Java:12) [classes/:na]
Caused by: Java.lang.ClassNotFoundException: org.springframework.cloud.context.named.NamedContextFactory$Specification
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:381) ~[na:1.8.0_112]
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424) ~[na:1.8.0_112]
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:331) ~[na:1.8.0_112]
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357) ~[na:1.8.0_112]
... 31 common frames omitted
Utiliser 1.4.5 avec Brixton.SR6 est une combinaison qui fonctionne généralement bien pour moi.
Si vous suivez le démarrage rapide sur http://projects.spring.io/spring-cloud/ il vous indique les versions compatibles. Le train de versions de Camden n'est pas compatible avec Spring Boot 1.5.x
Vous pouvez également lire les notes de publication pour chaque version qui note les versions de composants compatibles:
https://github.com/spring-projects/spring-cloud/wiki/Spring-Cloud-Camden-Release-Notes :
Spring Cloud Camden s'appuie sur Spring Boot 1.4.x.
Oui, il y a: http://start.spring.io/actuator/info
Il comprend plus de bibliothèques que Spring-Cloud, mais pas chacune d'entre elles.