2009-05-03 104 views
25

我的項目包含一個jar文件,因爲它被列爲傳遞依賴項。Maven:刪除單個傳遞依賴項

但是,我已經驗證不僅我不需要它,但它會導致問題,因爲jar文件內的類會在另一個jar文件中影響我需要的類。

如何從傳遞性依賴關係中排除單個jar文件?

回答

30

您可以排除以下方式的依賴:

 <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring</artifactId> 
       <version>2.5.6</version> 
       <exclusions> 
         <exclusion> 
           <groupId>commons-logging</groupId> 
           <artifactId>commons-logging</artifactId> 
         </exclusion> 
       </exclusions> 
     </dependency> 
3

您可以通過明確排除有問題的工件來做到這一點。採取包括問題的依賴,將其標記要排除:

從行家website

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-a</artifactId> 
    <version>1.0</version> 
    <exclusions> 
    <exclusion> 
     <groupId>group-c</groupId> 
     <artifactId>excluded-artifact</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
15

的正確方法是使用排除機制,但是有時您可能更願意使用下面的hack來避免在大量工件具有相同的傳遞依賴關係時添加大量排除項,而這些傳遞性依賴關係是您希望忽略的。您可以定義一個「提供」範圍的附加依賴項,而不是指定排除項。這告訴Maven你將在運行時手動處理這個工件,所以它不會被打包。例如:

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
    </dependency> 
    <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
      <scope>provided</scope> 
    </dependency> 

副作用:你必須指定一個的神器,要被忽略,它的POM將在編譯時進行檢索;定期排除情況並非如此。如果在防火牆後面運行私有的Maven存儲庫,這可能會成爲一個問題。

+0

我一直試圖通過ole 方法排除jar依賴關係中的servlet-api,並且這對我不起作用,但是嘗試了這種方法,它實現了這個竅門。謝謝。 – Aaron 2011-01-28 15:10:18