我正在开发一个将部署到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
文件夹位于:
我不确定如何解决此错误。我尝试了各种组合,但似乎都没有效果。
更新
相关的第二个问题答案 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
,尝试升级到该版本。