Maven与战争僵硬的战争
我有一个项目,其中3个战争模块包装在耳朵模块中。 我的问题是,每个图书馆罐都包含在每个战争模块以及耳模块中,这使得生成的耳朵文件非常大(目前大约190MB)。
我跟着关于使用maven制作瘦身战争的教程:http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html
有了这个,我设法将耳朵的大小降低到大约45MB,这很好,但是当我试图部署到glassfish时,它抱怨了一些缺失的类。
我发现这是由于依赖于appfuse-struts,它被打包成一个war文件。 这包括在战争项目之一中使用战争路径依赖。
由于制作瘦战争的教程声明,战争中发现的所有依赖关系也必须在耳朵中定义。 我试过这个,但是appfuse-struts依赖是warpath,所以这不起作用。 (当只向耳朵添加战争依赖时,它会抱怨它没有找到某些类,并且在添加warpath依赖以及maven抱怨它不知道战争路径是什么时)。
有没有人知道在战争中使用战争路径依赖的情况下创建一个与瘦骨w ear的耳朵?
我想我可能找到了一个解决方案:
在瘦骨w tutorial的教程中,应该将WEB-INF / lib / *。jar添加到packagingExcludes。 然后,将所有的依赖关系添加到耳朵配置中,使其可用于罐子。
问题在于war-packaged依赖不会将其传递依赖添加到ear的lib文件夹中,因此他们需要找到进入lib库文件夹或war包的WEB-INF / lib文件夹的路径。
我选择了最后一个,将它们添加到war文件的WEB-INF / lib中。
为此,首先通过执行mvn dependency:tree
来获取包含war / warpath资源的war项目的mvn dependency:tree
。
接下来,找到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>
这将使玻璃鱼停止抱怨课程未被发现。 我还没有到那里,所以可能需要包括更多的罐子,但它越来越近了。
链接地址: http://www.djcxy.com/p/82661.html