Есть третий компромиссный вариант, который я реализовал в своем проекте. Он хранит все в одном файле web.xml, в то же время делая его и файл pom.xml читабельным. В моем случае мне иногда требовалось обеспечить безопасность, а иногда нет защиты, в зависимости от среды.
Итак, что я сделал:
В файле pom.xml определите два профиля (или столько, сколько вам нужно). В профилях включить два свойства. Когда вам нужна безопасность, вы оставляете их пустыми, например:
<enable.security.start></enable.security.start>
<enable.security.end></enable.security.end>
Когда вы хотите исключить все средства безопасности, вы определяете их следующим образом:
<enable.security.start><!--</enable.security.start>
<enable.security.end>--></enable.security.end>
Затем у вас есть один файл web.xml со следующим:
${enable.security.start}
<security-constraint>
...
// all of the XML that you need, in a completely readable format
...
</login-config>
${enable.security.end}
pom.xml maven-war-plugin должен быть настроен на использование фильтрации. Моя выглядит так:
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
...
Итак, в основном, когда вы выбираете профиль для включения защиты, вы получаете два дополнительных CRLF в вашем файле web.xml. Когда вы выбираете профиль, который НЕ включает безопасность, XML все еще находится в файле web.xml, но он закомментирован, поэтому его игнорируют. Мне это нравится, потому что вам не нужно беспокоиться о синхронизации нескольких файлов, но XML по-прежнему доступен для чтения (и он находится в файле web.xml, где люди будут его искать).