2012-11-11 179 views
2

我剛剛發現了一件令人生畏的事情。有兩個版本的彈簧依賴性座標。春季依賴關係

項目依賴於彈簧mvc和彈簧流。有兩組平行的依賴關係。

Spring MVC依賴於以下方案:org.springframework:spring-asm

Spring Flow依賴於以下方案:org.springfrmaework:org.springframework.asm

爲什麼有兩個不同的相同依賴集?如何克服它?

<dependency> 
     <groupId>org.springframework.webflow</groupId> 
     <artifactId>org.springframework.webflow</artifactId> 
     <version>2.3.1.RELEASE</version> 
    </dependency> 


<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.0.4.RELEASE</version> 
    </dependency> 
+0

你能給出這些(MVC和Flow)依賴關係的完整座標嗎? –

+0

@AndrewLogvinov,增加了mvc和流依賴關係 –

+0

我不是100%確定,但我認爲他們改變了Spring 3發佈的命名約定。我建議在整個項目中使用(如果可能)單個Spring版本。如果沒有,我會從'webflow'中排除'asm',並保存在'webmvc'中。 –

回答

3

它基本上是你使用的是文物的問題:

<dependency> 
    <groupId>org.springframework.webflow</groupId> 
    <artifactId>org.springframework.webflow</artifactId> 
    <version>2.3.1.RELEASE</version> 
</dependency> 

是從SpringSource Enterprise Bundle Repository神器和那些文物是兼容OSGi。我引用:

歡迎使用SpringSource Bundle Repository。在這裏您可以找到 開發Spring應用程序時常用的數百個開源企業庫的OSGi就緒版本 。

在另一方面,你必須:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>3.0.4.RELEASE</version> 
</dependency> 

是從the maven repository標準的神器。

org.springframework.asm

是ASM的神器與OSGi的使用的一個補丁版本。

解決此問題的最佳解決方案是僅使用SEBR存儲庫工件。

我推薦這個,因爲有一次我從maven中央回購(他們是腐敗)的瓶子有問題,所以我嘗試使用SEBR的任何春天依賴。但是我引用from the documentation

如果OSGi的不要緊,你,無論是工作的地方,但也有 它們之間的一些優點和缺點。一般來說,選擇一個地方或 其他爲您的項目;不要混合它們。這尤其重要,因爲EBR工件必須使用與Maven Central工件不同的命名規則 。

+1

我認爲你應該添加一個鏈接到[1.3。 1依賴管理和命名約定](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/overview。html#dependency-management)從文檔 - 這裏很好的解釋 –

+0

@BorisTreukhov敏銳的觀察。 – ElderMael

+0

'webmvc'似乎不存在於'EBR'庫中,或者我缺少一些東西? –