Как перезаписать файлы в файле WAR во время сборки maven?

У меня есть проект веб-приложения на Java, который я разрабатываю в Eclipse (точнее, MyEclipse 10) и создаю с использованием Maven 3.

У меня есть следующий макет (включая только файлы, относящиеся к моей проблеме:

project root
|-- src
|   |-- main
|   |   |-- java
|   |   |-- resources
|   |   |   |-- log4j.xml
|   |   |   +-- struts.properties
|   |   |-- webapp
|   |   |   |-- META-INF
|   |   |   |   +--context.xml
|   |   |-- config
|   |   |   |-- test
|   |   |   |   |--log4j.xml
|   |   |   |   |--struts.properties
|   |   |   |   +--context.xml
|   |   |   +-- prod
|   |   |   |   |--log4j.xml
|   |   |   |   |--struts.properties
|   |   |   |   +--context.xml
|   +--test
+--pom.xml

Как видите, я включил несколько файлов конфигурации. Тот, кто находится в нужном месте в рамках проекта, то есть внутриsrc/main/resources а такжеsrc/main/webapp те, которые я обычно использую, когда я работаю в MyEclipse. Я могу использовать коннекторы MyEclipse для автоматического обновления развертывания, например, до экземпляр Tomcat на моей машине разработчика. Я просто нажимаю & quot; запустить сервер & quot; и я могу отлаживать. Нет необходимости вообще использовать Maven в этом контексте.

Затем, когда я хочу создать релиз для другой среды, такой как тестирование или производство, я запускаюmvn -P test clean install и это создает хорошую войну.

Моя цель состоит в том, чтобы заменить файлы конфигурации внутри окончательной WAR на файлы вsrc/config/{environment}/.

Я установил профили в моемpom.xml:

<profiles>
    <profile>
        <id>test</id>
        <properties>
            <environment>test</environment>
        </properties>
    </profile>

    <profile>
        <id>prod</id>
        <properties>
            <environment>prod</environment>
        </properties>
    </profile>
</profiles>

Затем я пытаюсь скопировать эти ресурсы из указанного профиля (используяenvironment переменная) в правильное место внутри WAR (или во временную папку, которая будет заархивирована в WAR):

<webResources>
    <resource>
        <directory>/src/main/config/${environment}</directory>
        <targetPath>META-INF/</targetPath>
        <includes>
            <include>context.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/config/${environment}</directory>
        <targetPath>WEB-INF/classes/</targetPath>
        <includes>
            <include>
                struts.properties
            </include>
            <include>
                log4j.xml
            </include>
        </includes>
    </resource>
</webResources>

Теперь это работает, за исключением того, что «стандарт» После этого ресурсы копируются в каталог, поэтому они перезаписывают эти файлы. Так что я всегда получаю, например,log4j.xml отsrc/main/resources вместо того, чтобы сказатьsrc/main/configuration/prod/

Выписка из вывода Maven:

[INFO] Processing war project
[INFO] Copying webapp webResources [D:\workspace\MyProject/src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp webResources [D:\workspace\MyProject\src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp resources [D:\workspace\MyProject\src\main\webapp]

Как вы можете видеть в последней строке, материал изsrc/main/webapp копируется ПОСЛЕ, таким образом перезаписывая мои пользовательские файлы :(

Мой вопрос: как заставить Maven использовать файлы "из активированного профиля"? и каким-то образом перезаписать «натуральный» файлы?

Ответы на вопрос(5)

Ваш ответ на вопрос