我有一个现有的Spring Boot项目(1.4.3.RELEASE),我正在尝试使用Cloud AWS项目添加一些功能。但是,仅仅将依赖项添加到gradle构建文件会在实例化我的一个@Configuration类时导致明显的cglib问题。
将以下行添加到gradle构建并运行应用程序:
compile("org.springframework.cloud:spring-cloud-starter-aws-messaging:1.1.3.RELEASE")
原因:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.***.application.config.AwsConfig$$EnhancerBySpringCGLIB$$5301ed81.() at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:85) ~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
它抱怨我的@Configuration类中没有找到非空构造函数,但最新版本的Spring支持这些构造函数。如果我删除依赖项,应用程序启动正常。如何解决这个问题而不重新配置我的类?等待Cloud AWS的更新版本?
答案 0 :(得分:1)
您需要将应用配置为使用BOM依赖关系以避免依赖性冲突。 BOM更像是maven功能(您可以阅读here),但Spring人员已经提出了一个Gradle插件来允许相同的行为。请查看此Spring Blog Post以获取完整说明。但基本上将其添加到您的gradle配置中:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RC1"
}
}
apply plugin: "io.spring.dependency-management"
然后你可以这样做:
dependencyManagement {
imports {
mavenBom 'org.springframework.boot:spring-boot-starter-parent:1.4.2.RELEASE'
}
}
dependencies {
compile "org.springframework.boot:spring-boot-starter-web"
}
您不必为其指定spring boot插件的实际依赖项版本。