maven uber war (cargo-maven2-plugin) merging only the first <context-param> element

356 Views Asked by At

I am trying to merge two wars and thereby the web.xml files using the maven uber war cargo-maven2-plugin. The merge on all the tags (filters, servlet) happens as desired, but for <context-param> it's only merging the first element defined in the web.xml on R.H.S. I want to keep all context-param on the web.xml on L.H.S merge all the <context.param> elements defined in my web.xml on R.H.S. Any help would be appreciated. Here is my code

web.xml on R.H.S

    <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>

**

  • merge.xml

**

    <?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>
1

There are 1 best solutions below

0
On

Well, the problem in this particular case was the difference in the xmlns version, and schema location at the top of web.xml. The first war had version=2.4, while the second one had version=3.0. Keeping both the web.xml schemas in sync by using the following resolved the issue (I have no idea why it merged the filter, servlet tags, and failed on merging all the context-param tags though).

<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">

I