【问题标题】:Provider org.springframework.cloud.cloudfoundry.CloudFoundryConnector could not be instantiated提供者 org.springframework.cloud.cloudfoundry.CloudFoundryConnector 无法实例化
【发布时间】:2017-08-15 22:26:30
【问题描述】:

我正在开发一个将部署到 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:提供者 org.springframework.cloud.cloudfoundry.CloudFoundryConnector 不能 被实例化

引起:java.lang.NoSuchMethodError: org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator.(Lorg/springframework/cloud/cloudfoundry/Tags;[Ljava/lang/String;)V 在 io.pivotal.spring.cloud.SsoServiceInfoCreator.(SsoServiceInfoCreator.java:11)

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

两者的META-INF/services 文件夹都在这里:

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

S3 连接器: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 相关的第二个问题

【问题讨论】:

    标签: grails spring-cloud cloud-foundry


    【解决方案1】:

    在类路径上有多个连接器扩展库很常见,每个都有自己的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,请尝试升级到该版本。

    【讨论】:

    • 非常感谢!我使用了spring-cloud-s3-service-connector:1.1.0,而后者又使用了spring-cloud-core:1.2.1.RELEASE。现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2020-01-17
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多