提供者org.springframework.cloud.cloudfoundry.CloudFoundryConnector无法实例化

时间:2017-03-23 11:32:32

标签: grails cloudfoundry spring-cloud pivotal-cloud-foundry

我正在开发一个将部署到cloudfoundry的grails 2.5.3应用程序。应用程序绑定了很少的服务,为了获得这些服务的值,我使用了两个连接器:

//s3 service connector
compile ("org.cloudfoundry.community:spring-cloud-s3-service-connector:1.0.0") {
    excludes "aws-java-sdk", 'slf4j-api', 'slf4j-log4j12', 'slf4j'
}     
//sso service connector
compile (group: 'io.pivotal.spring.cloud', name: 'spring-cloud-sso-connector', version: '1.1.0.RELEASE') {
    excludes 'slf4j-api', 'slf4j-log4j12', 'slf4j'
}

当我使用这两个时,我的应用程序出错:

  

org.springframework.cloud.CloudConnector:Provider   org.springframework.cloud.cloudfoundry.CloudFoundryConnector不能   实例化

     

引起:java.lang.NoSuchMethodError:   org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator(Lorg / springframework的/云/ cloudfoundry /标签; [Ljava /郎/字符串;):V           在io.pivotal.spring.cloud.SsoServiceInfoCreator。(SsoServiceInfoCreator.java:11)​​

我认为错误正在发生,因为这些服务中的每一个都在services下有一个META-INF文件夹,显然只有一个文件夹在同时使用这两个文件夹时被选中。

两者的META-INF/services文件夹位于:

SSO连接器:https://github.com/pivotal-cf/spring-cloud-sso-connector/tree/master/src/main/resources/META-INF/services

S3 Connector:https://github.com/cloudfoundry-community/spring-cloud-s3-service-connector/tree/master/src/main/resources/META-INF/services

我不确定如何解决此错误。我尝试了各种组合,但似乎都没有效果。

更新

我添加了与此https://stackoverflow.com/questions/42976791/common-dependency-for-two-packages-gets-dropped-when-both-pages-are-used

相关的第二个问题

1 个答案:

答案 0 :(得分:1)

在类路径上有多个Connector扩展库很常见,每个都有自己的META-INF/services。这不应该是一个问题。

other question,您有:

compile ("org.cloudfoundry.community:spring-cloud-s3-service-connector:1.0.0") {
    excludes "aws-java-sdk", 'slf4j-api', 'slf4j-log4j12', 'slf4j'
}
//dependency tree shows 
+--- org.cloudfoundry.community:spring-cloud-s3-service-connector:1.0.0
|    \--- org.springframework.cloud:spring-cloud-cloudfoundry-connector:1.0.0.RELEASE
|         \--- org.springframework.cloud:spring-cloud-core:1.0.0.RELEASE
|    \--- org.hamcrest:hamcrest-all:1.3

compile (group: 'io.pivotal.spring.cloud', name: 'spring-cloud-sso-connector', version: '1.1.0.RELEASE') {
    excludes 'slf4j-api', 'slf4j-log4j12', 'slf4j', 'spring-cloud-starter-oauth2'
}
//dependency tree shows
+--- io.pivotal.spring.cloud:spring-cloud-sso-connector:1.1.0.RELEASE
|    \--- org.springframework.cloud:spring-cloud-spring-service-connector:1.1.1.RELEASE
|         \--- org.springframework.cloud:spring-cloud-core:1.1.1.RELEASE
|    \--- org.springframework.cloud:spring-cloud-cloudfoundry-connector:1.1.1.RELEASE

这表明spring-cloud-s3-service-connector:1.0.0过渡依赖于spring-cloud-core:1.0.0.RELEASE,而spring-cloud-sso-connector:1.1.0.RELEASE取决于spring-cloud-core:1.1.1.RELEASE。构建系统只会引入spring-cloud-core的一个版本,并且spring-cloud-core:1.0.0.RELEASE似乎是实际被引入的版本,spring-cloud-sso-connector与旧版本不兼容。

Maven Central中有spring-cloud-s3-service-connector:1.1.0,尝试升级到该版本。