2014-04-23 138 views
0

如果我有我的myproject1的一個項目,該項目具有以下depenedencies:Maven的測試範圍

 <!-- logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.6</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>1.1.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.1.1</version> 
      <scope>test</scope> 
     </dependency> 

而且包括我在myproject2 myproject1像這樣:

<dependency> 
     <groupId>com.mydomain</groupId> 
     <artifactId>myproject1</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <!-- Android Logging--> 
    <dependency> 
     <groupId>com.github.tony19</groupId> 
     <artifactId>logback-android-core</artifactId> 
     <version>1.1.1-2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.github.tony19</groupId> 
     <artifactId>logback-android-classic</artifactId> 
     <version>1.1.1-2</version> 
    </dependency> 

我仍然看到的logback類是包含在myproject2中。我的理解是,測試範圍應該防止那些罐子流出到父項目中。我誤解了什麼嗎?我目前遇到編譯問題,因爲我的父項目依賴於logback-android,所以我有多個具有相同名稱的類,例如ch.qos.logback.classic.AsyncAppender

回答

1

您可以從myproject1中排除傳遞依賴關係,並且您在此處有兩個選項。

可選依賴關係。馬克logback-coremyproject1可選:

<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-core</artifactId> 
    <version>1.1.1</version> 
    <scope>test</scope> 
    <optional>true</optional> 
</dependency> 

排除依賴。包括myproject1當排除logback-core

<dependency> 
    <groupId>com.mydomain</groupId> 
    <artifactId>myproject1</artifactId> 
    <version>1.0</version> 
    <exclusions> 
     <exclusion> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

而且我認爲,如果你運行與測試,蓄客(-Dmaven.test.skip=truelogback-core不會反正包括在內。

運行mvn dependency:tree查看您的依賴關係的來源及其範圍。

+0

這是大多數開源項目的做法嗎?看起來很奇怪,有沒有更好的方法來測試日誌類,但是你不想在最終的包中使用它。 – thatidiotguy

+0

與測試範圍的依賴關係不包含在包裝中,除非您明確包含它們,那麼myproject2的包裝是什麼? – hoaz

+0

它目前沒有設置,所以它默認爲jar我想。 – thatidiotguy