Jak zastąpić pliki w pliku WAR podczas kompilacji Maven?

Mam projekt webapp Java, który rozwijam w Eclipse (dokładniej MyEclipse 10) i buduję za pomocą Maven 3.

Mam następujący układ (w tym tylko pliki związane z moim problemem:

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

Jak widać, załączyłem kilka plików konfiguracyjnych. Ten, który znajduje się we właściwym miejscu w ramach projektu, tj. Wewnątrzsrc/main/resources isrc/main/webapp to te, których rutynowo używam, gdy pracuję w MyEclipse. Mogę użyć złączy MyEclipse, aby automatycznie zaktualizować wdrożenie na np. instancja Tomcat na moim komputerze dev. Po prostu klikam „uruchom serwer” i mogę debugować. Nie ma potrzeby używania Mavena w tym kontekście.

Następnie, gdy chcę zbudować wersję dla innego środowiska, takiego jak testowanie lub produkcja, uruchamiammvn -P test clean install i buduje miłą WOJNĘ.

Moim celem jest zastąpienie plików konfiguracyjnych w ostatecznej wersji WAR przez tych, którzy są wsrc/config/{environment}/.

Mam ustawione profile w moimpom.xml:

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

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

Następnie próbuję skopiować te zasoby z określonego profilu (używającenvironment zmienna) do właściwej lokalizacji wewnątrz WAR (lub folderu tymczasowego, który zostanie spakowany do 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>

Teraz wydaje się, że działa, z wyjątkiem tego, że „standardowe” zasoby są kopiowane do katalogu PO tym, więc zastępują te pliki. Więc zawsze kończę na np.log4j.xml zsrc/main/resources zamiast tego z powiedzeniasrc/main/configuration/prod/

Wyciąg z wyjścia 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]

Jak widać na ostatniej linii, rzeczy zsrc/main/webapp jest kopiowany PO, tym samym nadpisując moje pliki niestandardowe :(

Moje pytanie: jak zmusić Mavena do używania plików „z aktywowanego profilu” i jakoś PRZEGRĄĆ „naturalne” pliki?

questionAnswers(5)

yourAnswerToTheQuestion