Maven: Customize web.xml of web-app project

java, maven-2, profile, web-applications, web.xml

Solution

is there a way to have two web.xml files and select the appropriate one depending on the profile?

Yes, within each profile you can add a configuration of the `maven-war-plugin` and configure each to point at a different `web.xml`.

<profiles>
    <profile>
        <id>profile1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webXml>/path/to/webXml1</webXml>
                    </configuration>
                </plugin>
                 ...

As an alternative to having to specify the `maven-war-plugin` configuration in each profile, you can supply a default configuration in the main section of the POM and then just override it for specific profiles.

Or to be even simpler, in the main `<build><plugins>` of your POM, use a property to refer to the `webXml` attribute and then just change it's value in different profiles

<properties>
    <webXmlPath>path/to/default/webXml</webXmlPath>
</properties>
<profiles>
    <profile>
        <id>profile1</id>
        <properties>
            <webXmlPath>path/to/custom/webXml</webXmlPath>
        </properties>
    </profile>
</profiles>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>${webXmlPath}</webXml>
            </configuration>
        </plugin>
        ...

Problem

I have a web application Maven project, and I want to customize the web.xml file depending on the Profile that is running. I am using the Maven-War-plugin, which allows me to define a "resources" directory, where the files may be filtered. However, filtering alone is not sufficient for me. In more detail, I want to include (or exclude) the whole section on security, depending on the profile I an running. This is the part: ``` .... .... <security-constraint> <web-resource-collection> <web-resource-name>protected</web-resource-name> <url-pattern>/pages/*.xhtml</url-pattern> <url-pattern>/pages/*.jsp</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>${web.modules.auth.type}</auth-method> <realm-name>MyRealm</realm-name> </login-config> <security-constraint> .... .... ``` If this is not done easily, is there a way to have two web.xml files and select the appropriate one depending on the profile?

Original source