2011-04-29 53 views
2

我在Eclipse中有一個多模塊的Maven項目。它有一個jar模塊,「myapp-core」和一堆.war模塊。核心模塊依賴於一些外部的罐子,而戰爭模塊依賴於核心。從.war中排除maven依賴的正確方法

問題是,當我構建.war文件時,所有的依賴關係都被複制到所有的WEB-INF/lib文件夾中,所以我們有重複的東西。從理論上講,解決問題的正確方法是將myapp-core中的依賴關係設置爲「提供」的範圍。不幸的是,當我這樣做時,所有.war模塊都會收到編譯錯誤。無論如何,所有的傳遞依賴都會被複制!

如何設置它,以排除在戰爭中常見的依賴關係?

(我不能排除所有的傳遞文物一個接一個,很遺憾。還有他們的50,這是一個不斷變化的列表。)

回答

1

,而不是「規定」,可以排除某些傳遞依賴被某些工件拉入,並允許其他依賴保留。例如,

X -depends-> B1 -depends-> C1 
Y -depends-> B2 -depends-> C2 -depends-> D1 

然後設置你的pom使X排除B1。然後你最終得到最新的B和最新的C(假設B2是B1的新版本,而C2是C1的更新版本)。此外,您可以聲明D1依賴關係,或將其標記爲「提供」。

更多的例子參見mvnref-book/dependencies,另一個stackexchange Q &甲here

1

可以排除,並使用配置部分

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <!-- 
      Exclude JCL and LOG4J since all logging should go through SLF4J. 
      Note that we're excluding log4j-<version>.jar but keeping 
      log4j-over-slf4j-<version>.jar 
      --> 
      <packagingExcludes> 
      WEB-INF/lib/commons-logging-*.jar, 
      %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar] 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

參考恣看到包括僞影here