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?