2012-07-11 130 views
3

我有一個項目,其中3個戰爭模塊包裝在耳模塊。我的問題是,每個圖書館罐都包含在每個戰爭模塊以及耳模塊中,這使得生成的耳朵文件非常大(目前大約190MB)。Maven瘦戰與戰爭路線

我也跟着上做瘦戰爭與Maven這裏的教程:http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

有了這個,我設法耳朵的尺寸下降到大約45MB,這是很好的,但是當我試圖部署到GlassFish它抱怨一些失蹤的班級。

我發現這是由於依賴於appfuse-struts,它被打包成一個war文件。這包括在戰爭項目之一中使用戰爭路徑依賴。

由於製作瘦骨w戰的教程指出,在戰爭中發現的所有依賴關係也必須在耳朵中定義。我試過這個,但是appfuse-struts依賴是warpath,所以這不起作用。 (當只向耳朵添加戰爭依賴時,它會抱怨它沒有找到某些類,並且在添加戰爭路徑依賴時,maven會抱怨它不知道什麼是戰爭路徑。)

有沒有人當戰爭使用戰爭路線依賴性時,知道創造一個瘦骨w ear的耳朵的方法?

回答

5

我想我可能已經找到了解決辦法:

在瘦戰爭教程,一個是應該jar添加WEB-INF/lib目錄/ *到packagingExcludes。然後,將所有的依賴關係添加到耳朵配置中,使其可用於罐子。

問題是,war-packaged依賴不會將其傳遞依賴項添加到ear的lib文件夾中,所以它們或者需要找到自己的方式進入ear lib文件夾或WEB-INF/lib文件夾戰爭包。

我選擇了最後一個,將它們添加到WAR文件的WEB-INF/lib中。

爲此,首先通過執行mvn dependency:tree來獲取包含war/warpath資源的war項目的依賴關係樹。

接下來,找到warpath的依賴關係。在我的情況下,它看起來像這樣:

 +- org.appfuse:appfuse-struts:warpath:2.0.2:compile 
     | +- org.appfuse:appfuse-web-common:war:2.0.2:compile 
     | +- org.appfuse:appfuse-web-common:warpath:2.0.2:compile 
     | +- displaytag:displaytag:jar:1.1.1:compile 
     | | \- org.slf4j:jcl104-over-slf4j:jar:1.4.2:compile 
     | +- commons-fileupload:commons-fileupload:jar:1.2.1:compile 
     | +- org.apache.commons:commons-io:jar:1.3.2:compile 
     | +- org.appfuse:appfuse-service:jar:2.0.2:compile 
     | | +- velocity:velocity:jar:1.4:compile 
     | | | \- velocity:velocity-dep:jar:1.4:runtime 
     | | +- org.codehaus.xfire:xfire-java5:jar:1.2.6:compile 
     | | | +- org.codehaus.xfire:xfire-aegis:jar:1.2.6:compile 
     | | | | \- net.java.dev.stax-utils:stax-utils:jar:20040917:compile 
     | | | +- org.codehaus.xfire:xfire-annotations:jar:1.2.6:compile 
     | | | +- xfire:xfire-jsr181-api:jar:1.0-M1:compile 
     | | | \- org.codehaus.xfire:xfire-core:jar:1.2.6:compile 
     | | |  +- stax:stax-api:jar:1.0.1:compile 
     | | |  +- org.codehaus.woodstox:wstx-asl:jar:3.2.0:compile 
     | | |  \- commons-httpclient:commons-httpclient:jar:3.0:compile 
     | | \- org.codehaus.xfire:xfire-spring:jar:1.2.6:compile 
     | |  +- org.apache.xbean:xbean-spring:jar:2.8:compile 
     | |  \- org.codehaus.xfire:xfire-xmlbeans:jar:1.2.6:compile 
     | |  \- xmlbeans:xbean:jar:2.2.0:compile 
     | +- commons-dbcp:commons-dbcp:jar:1.2.2:compile 
     | | \- commons-pool:commons-pool:jar:1.3:compile 
     | +- org.directwebremoting:dwr:jar:2.0.1:compile 
     | +- javax.servlet:jstl:jar:1.1.2:compile 
     | +- taglibs:standard:jar:1.1.2:compile 
     | +- opensymphony:oscache:jar:2.3:compile 
     | +- opensymphony:sitemesh:jar:2.2.1:compile 
     | +- org.tuckey:urlrewritefilter:jar:3.0.4:compile 
     | \- commons-lang:commons-lang:jar:2.4:compile 

因此,我們需要確保這些都可用。這可以通過更改WEB-INF/lib/*的包裝排除來排除所有內容,而是排除除我們想保留的所有內容外的所有內容。

這可以這樣做:

 <packagingExcludes> 
     %regex[WEB-INF/lib/(?!clickstream|struts|appfuse|commons-fileupload|commons-dbcp|dwr|oscache|sitemesh|urlrewritefilter|commons-lang|velocity|xwork|commons-digester).*.jar] 
     </packagingExcludes> 

這將使GlassFish的停止抱怨不被發現的類。我還沒有到那裏,所以可能需要包括更多的罐子,但它越來越近了。使一切工作後

+0

我的全packagingExcludes正則表達式是這樣的: %的正則表達式[WEB-INF/lib目錄/(?!點擊流|支柱|的appfuse |公地文件上傳|公地DBCP | DWR | OSCache的|的sitemesh | urlrewritefilter |公地郎|速度| XWork的|公共沼氣池| XFire軟件| xbean | OGNL | freemarker的|。ActiveMQ的)*罐子] – Tobb 2012-08-16 10:19:07