2016-12-23 59 views
0

我有一個現有的Spring Boot項目(1.4.3.RELEASE),並試圖使用雲AWS項目添加一些功能。但是,僅僅在Gradle構建文件中添加依賴關係會導致在實例化一個@Configuration類時出現明顯的cglib問題。Spring Cloud AWS cglib問題

添加以下行搖籃構建和運行應用程序:

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

此版本的AWS消息傳遞基於Spring Boot 1.3,它使用Spring 4.2,它不支持非空的構造函數。你可以嘗試強制Spring的依賴性爲4.3,但是它使用Spring Boot 1.3的事實可能使其不適用於1.4(對於Boot的內部API更改等)。 –

+0

感謝您的回覆。我重新配置類有一個空的構造函數和autowire的依賴關係,但現在即使自動裝配行爲也無法正常工作。不知道爲什麼加入這會導致核心Spring的行爲如此混亂,但哦。我會看看我能否想出一個黑客解決方法。 – koreys

+0

也只是爲了更新......我將Spring Boot版本降級到了1.3.8,而我仍然遇到同樣的問題,即配置類沒有得到它的字段自動裝配。刪除這個依賴關係,一切都按照原樣運行。 – koreys

回答

1

您需要配置應用程序以使用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" 
} 

上,您不必指定春季啓動插件的實際依賴版本。

+1

這不適合我。 – koreys