Использование профилей Maven с WAR-упакованным продуктом - PullRequest
0 голосов
/ 11 февраля 2011

У нас есть сборка Maven (версия 2.2.1), которая в настоящее время создает файл WAR. Наш выходной каталог - target/, поэтому мы получаем артефакт сборки target/MyWar.WAR.

Я добавляю два профиля в наш файл POM.xml, чтобы упростить определенные "варианты" сборки, для каждого из которых требуется определенная версия файла A.xml. В промежуточном каталоге сборки target/MyWar/ есть 3 файла:

A.xml
A_1.xml
A_2.xml

Для сборки в Maven без указанного профиля следует использовать A.xml, и в настоящее время это так. Я хочу использовать maven-antrun-plugin, чтобы (для профиля 1) заменить A.xml на A_1.xml, а для профиля 2 заменить A.xml на A_2.xml. (Удаление суффиксов _1 и _2.)

Это пример выполнения профиля 1:

<profile>
<id>Profile1</id>
<build>
...
    <execution>
        <id>Profile1-Replace</id>
        <phase>package</phase>
        <goals>
            <goal>run</goal>
        </goals>
        <configuration>
            <tasks>
                <delete
                    file="${project.build.outputDirectory}/../MyWar/A.xml" />
                <copy
                    file="${project.build.outputDirectory}/../MyWar/A_1.xml"
                    tofile="${project.build.outputDirectory}/../MyWar/A.xml" />
            </tasks>
        </configuration>
    </execution>
...
</build>
</profile>

Это правильно заменяет файлы в промежуточной целевой папке / MyWar /, но по какой-либо причине окончательная WAR, создаваемая в target, не не отражает эти изменения.

Как будто запуск в фазе «пакета» слишком поздний, и WAR уже построен. Изменение фазы на «compile» или «test», непосредственно предшествующие фазы, жалуются на то, что файл A.xml (и промежуточный каталог сборки) еще даже не были созданы.

1 Ответ

2 голосов
/ 11 февраля 2011

Я бы предложил вместо этого использовать фазу process-resources или даже generate-resources , если вы считаете, что это лучше подходит. В крайнем случае используйте prepare-package . Но фаза package - неподходящее место для подобных вещей. Все такие модификации могут обычно происходить непосредственно в дереве исходных текстов.

Однако, если вы выполняете манипулирование файлами в отдельном каталоге, вы можете добавить его во время фазы package , используя maven-war-plugin следующим образом:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
      <webResources>
        <resource>
          <directory>A_variant</directory>
        </resource>
      </webResources>
    </configuration>
  </plugin>

Конечно, если вам нужно пойти по этому пути, было бы проще сохранить три каталога и выбрать подходящий в вашем профиле.

...