2016-07-07 80 views
0

我在一個web項目中使用了多個基於spring的maven倉庫,而且我遇到了子POM使用的依賴問題。避免子依賴使用Maven重寫父依賴3

我有這樣一個父POM:

<dependencyManagement> 
    <dependencies> 

     <!-- SPRING -->    
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-framework-bom</artifactId> 
      <version>4.3.0.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING SECURITY --> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-bom</artifactId> 
      <version>4.1.0.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING BOOT --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-dependencies</artifactId> 
      <version>1.3.5.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

     <!-- SPRING WS --> 

     <dependency> 
      <groupId>org.springframework.ws</groupId> 
      <artifactId>spring-ws-core</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.ws</groupId> 
      <artifactId>spring-ws-security</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 
     <!-- OTHER DEPENDENCIES OMITTED --> 
    </dependencies> 
</dependencyManagement> 

和一個孩子POM這樣的:

<dependencies> 
    <dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-ws-security</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-core</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
    </dependency> 
    <!-- OTHER DEPENDENCIES OMITTED --> 
</dependencies> 

至於我的行家排斥的理解去,這應該避免的壓倒一切父POM版本,但由於spring-ws-security依賴於其方法已更改的較低版本的spring-core(4.0.9),因此我無法在Tomcat本地服務器上部署應用程序,原因是NoSuchMethodError異常,也可以在應用程序實際部署時觸發對老版本的核心版本的依賴依然存在。

我該如何避免這種壓倒性的依賴? 還是有一種使用這兩種依賴關係的方法(只要我搜索的是不安全的)?

鏈接訪問已:

Similar problem, but from child to parent

Exclusions example

短短几年提到,我去過其他人也卻忘了鏈接。

編輯:spring-ws依賴關係使用spring 4.0.9覆蓋4.3.0版本(我需要使用的版本)我在父POM中定義了它。

+- org.springframework.ws:spring-ws-core:jar:2.2.3.RELEASE:compile 
[INFO] | | | +- org.springframework:spring-oxm:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
[INFO] | | | +- org.springframework:spring-web:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
[INFO] | | | \- org.springframework:spring-webmvc:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE) 
+0

請列出您正在獲取的庫的​​版本以及要獲取的版本。你可以運行'mvn dependency:tree'來列出依賴關係。 –

+0

我列出了一些錯誤的依賴@AntonKoscejev –

+0

因此根據你對Sundaraj的回答的評論,我不確定你到底想要達到什麼目的。你想讓這些彈簧工件成爲4.3或4.0版本嗎?由於你的父母,你得到4.3,但你說你不想讓孩子項目改變這個,所以你想得到4.3?但是spring-ws 2.2與彈簧4不兼容。3並且需要較舊的版本。所以你需要在child中使用4.0(在parent中定義或在child中重寫),或者你需要一些與spring 4.3兼容的spring-ws版本。你想要什麼幫助? –

回答

0

您可以通過簡單地提了版本爲4.0.9,像下面做你的孩子POM明確覆蓋。

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.0.9</version> 
</dependency> 

如下引用,這個版本會影響兒童的孩子的POM,如果有的話。

強制版本

一個版本總是會兌現如果宣佈在當前POM 使用特定的版本 - 不過,它應該是 指出,這將也影響其他poms下游如果它本身 取決於使用傳遞依賴。

+0

感謝您的快速回答Sundararaj,但問題是我不想重寫子POM內的版本,基本上我想要的是版本不被overrided,這就是我排除依賴版本spring-ws的原因使用。 –