2016-10-03 73 views
3

我不確定這是否支持Maven或不。我感謝任何幫助,我可以得到。孩子poms可以繼承父pom中定義的依賴排除嗎?

我有一個父pom,它定義了一個依賴項和一個排除項。我不能改變父POM:

<dependency> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0</version> 
    <exclusions> 
     <!-- this exclusion needs to be inherited by all children --> 
     <exclusion> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-config-server</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

然後在子POM,我需要從父是相同的依賴排除不同依賴。像這樣

<dependency> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0</version> 
    <exclusions> 
     <!-- this exclusion is just for the child --> 
     <exclusion> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

但如果我這樣做,孩子就會有SLF4J罐子排除(正確的),但它不會有彈簧雲配置服務器罐子排除在外,除非如果我重申父排除在該依賴關係的子代聲明中。

我意識到我可以複製它,但這很混亂,我意識到將孩子的排斥推到父母身上很容易,但是我會強制排除所有其他孩子。

我想要的是Maven合併依賴排除信息,當相同的依賴關係在父和子中被不同地聲明時。

這可能嗎?

+0

這可以通過在父使用dependencyManagement被正確處理,但你說你不能改變父。 ..在你的情況下,你必須重複排除....此外,原來的項目在使用slf4j而不是僅使用slf4j-api時會出錯,並讓用戶決定應該使用什麼實際實現... – khmarbaise

+0

這可能工作。我說我不能改變它,但是我真的不能將log4j2強加給父母。我可能會改變父母,使其不那麼幹擾。我會試一試。 –

+0

你能否澄清它將如何與dependencyManagement協同工作?你是說我會把排除在dependencyManagement部分內,並且會傳播下去嗎? –

回答

3

在你的父POM:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>foo</groupId> 
      <artifactId>bar</artifactId> 
      <version>1.0</version> 
      <exclusions> 
       <!-- this exclusion needs to be inherited by all children --> 
       <exclusion> 
        <groupId>org.springframework.cloud</groupId> 
        <artifactId>spring-cloud-config-server</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

在你的孩子POM:

<dependencies> 
    <dependency> 
     <groupId>foo</groupId> 
     <artifactId>bar</artifactId> 
     <exclusions> 
      <!-- this exclusion is just for the child --> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
</dependencies>