2011-02-11 31 views
10

以下Maven的POM參考狀態:Maven的'系統'範圍是可傳遞的,但'提供'不是?

提供 - 這很像編譯,而是指你所期望的 JDK或容器在 運行時提供。它僅在 編譯和測試類路徑中可用,而 不是可傳遞的

...

系統 - 這個範圍類似於爲,除了你必須 提供包含它 明確的JAR。工件始終可用 ,在 存儲庫中不會查找該工件。

我現在已經將一個有很多'系統'依賴關係的項目轉換爲'provided'。但是,看起來系統依賴關係是可傳遞的,這使得它們與提供的非常不相似,並且現在在我的構建中導致很多缺失的依賴關係。我的問題是雙重的:

  1. 是系統範圍傳遞?如果是這樣,Maven的參考是錯誤還是不完整?
  2. 有沒有辦法使依賴性傳遞,而不將它們打包到最終的程序集?
+1

你所說的「make依賴傳遞」是什麼意思? (就係統範圍而言,其理由是「系統依賴關係對解決現在由JDK提供的工件的依賴性特別有用,但在早期單獨下載時可用」......這對我來說絕對沒有意義,因爲您需要一旦它由JDK提供,就改變POM,所以不妨改變提供的範圍。) – 2012-08-07 12:22:58

回答

2

傳遞依賴將永遠是程序集的一部分。沒有範圍陳述你的意圖行爲。

現在的問題是:爲什麼有一個項目被包含在其他項目中(正如你所說明的那樣有傳遞依賴關係的意圖)一個程序集?通常,具有WAR-assembly的項目不會作爲依賴項包含在其他項目中(WAR-依賴項根本不提供它們的傳遞依賴項,因爲它們僅用於WAR疊加層)。

如果這是一個maven程序集,這很簡單。 Maven Assembly插件具有「排除」來過濾必須複製的文件。

如果這將是一個WAR項目,你可以排除WAR一些罐子這些不包括:

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes> 
    </configuration> 
</plugin> 
相關問題