我正在尝试使用maven uber war cargo-maven2-plugin合并两个战争,从而合并web.xml文件。所有标签(过滤器,servlet)上的合并都按照需要进行,但对于<context-param>
,它只合并R.H.S上web.xml中定义的第一个元素。我想在L.H.S上的web.xml上保留所有context-param,并将我的web.xml中定义的所有<context.param>
元素合并到R.H.S.任何帮助,将不胜感激。这是我的代码
R.H.S上的web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- ** SPRING ** -->
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.myorg.context.MyApplicationContextInitializer</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:conf/spring/*.xml</param-value>
</context-param>
<context-param>
<description>Location(s) to search for the Log4J config file</description>
<param-name>log4jConfigLocation</param-name>
<param-value>file:/dir/path/log4j.xml /WEB-INF/log4j.xml</param-value>
</context-param>
<context-param>
<description>
Boolean flag indicating whether internal Log4J debugging statements should be written. Log4J
will write debugging messages to System.out and error messages to System.err.
</description>
<param-name>log4jConfigDebug</param-name>
<param-value>false</param-value>
</context-param>
**
**
<?xml version="1.0"?>
<uberwar>
<wars>
<war>org.forgerock.openam:openam-server</war>
<war>com.myorg.xyz.addons:my-sso-addons-web</war>
</wars>
<merges>
<merge>
<type>web.xml</type>
<parameters>
<default>
<!-- Preserve execution order of filter-mappings -->
<tag name="context-param">
<strategy name="ChooseByName">
<default>
<strategy name="Preserve" />
</default>
<choice name="contextInitializerClasses">
<strategy name="Overwrite" />
</choice>
<choice name="contextConfigLocation">
<strategy name="Overwrite" />
</choice>
<choice name="log4jConfigLocation">
<strategy name="Overwrite" />
</choice>
</strategy>
</tag>
<tag name="filter-mapping">
<strategy name="Preserve"/>
</tag>
</default>
</parameters>
</merge>
</merges>
</uberwar>
的pom.xml
<!-- other entries are here -->
<packaging>uberwar</packaging>
<build>
<plugins>
<!-- merges openam-server with openam-addons-web-common -->
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<!-- merges the wars -->
<descriptor>src/assembly/merge.xml</descriptor>
<configuration>
<type>existing</type>
<home>${jboss.home}/aclsso</home>
</configuration>
<deployer>
<type>installed</type>
</deployer>
<deployables>
<deployable>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<type>war</type>
<properties>
<context>openam</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:0)
嗯,这个特殊情况下的问题是xmlns版本的差异,以及web.xml顶部的架构位置。第一场战争版本= 2.4,而第二场战争版本= 3.0。通过使用以下方法保持web.xml模式同步解决了问题(我不知道为什么它合并了过滤器,servlet标记,并且在合并所有context-param标记时失败了)。
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
我