Запустить задачу муравья на этапе сборки maven до того, как будет упакована война?

При развертывании веб-приложения мне нужно обновить некоторые переменные в ресурсах пользовательского интерфейса, разархивировать некоторые ресурсы и объединить некоторые файлы, в настоящее время это достигается с помощью задачи ant. Я пытаюсь запустить эту задачу в процессе сборки maven, используя что-то вроде этого ...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>deploy-ui</id>
            <phase>prepare-package</phase>
            <inherited>false</inherited>
            <configuration>
                <target>
                    <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
                    <ant antfile="build.xml" target="static-assets" />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Вышеупомянутое не удается, потому что файлы еще не были скопированы в целевой каталог. Если я установил фазу на «пакет», задача муравья будет работать нормально, и все файлы будут созданы / изменены, но это не поможет, поскольку .war уже был создан до того, как будет запущена цель муравья.

По сути, мне нужно запустить мою цель-муравей ближе к концу фазы подготовки пакета.

Посмотрев Справочник по жизненному циклу, я не могу понять, как раскрыть более детальные цели для плагина antrun.

Любые идеи?


person Patrick Clancey    schedule 01.10.2012    source источник
comment
Вы думали о выполнении этих задач с муравьями, используя вместо этого чистые плагины maven?   -  person maba    schedule 01.10.2012


Ответы (2)


Поскольку я не получил ответа на свой комментарий, я предполагаю, что вы хотите продолжать использовать maven-antrun-plugin.

Из того, что я узнал и испытал, если два плагина должны выполняться на одной и той же фазе, они будут выполняться в том порядке, в котором они объявлены в pom.xml.

Чтобы это сработало, вам нужно добавить maven-war-plugin в список <plugins/> после maven-antrun-plugin.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>deploy-ui</id>
            <phase>package</phase>
            <inherited>false</inherited>
            <configuration>
                <target>
                    <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
                    <ant antfile="build.xml" target="static-assets" />
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <!-- First step is to disable the default-war build step. -->
            <id>default-war</id>
            <phase>none</phase>
        </execution>
        <execution>
            <!-- Second step is to create an exploded war. Done in prepare-package -->
            <id>war-exploded</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>exploded</goal>
            </goals>
        </execution>
        <execution>
            <!-- Last step is to make sure that the war is built in the package phase -->
            <id>custom-war</id>
            <phase>package</phase>
            <goals>
                <goal>war</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Добавлено еще несколько казней, так что default-war сначала отключен, затем война взорвана и, наконец, война упакована.

person maba    schedule 01.10.2012
comment
это был очень полезный ответ на мою проблему. Однако у меня была немного другая настройка: взорванный (подготовить-пакет) - ›копировать ресурсы (подготовить-пакет) -› война (пакет). Чтобы не перезаписать то, что сгенерировала задача war: explode, мне пришлось указать <warSourceDirectory> на пустой каталог для выполнения war: war. - person omilke; 01.07.2013

Как вы заметили, это место, где жизненный цикл не обеспечивает необходимой детализации. Я ранее отвечал на аналогичный вопрос для кого-то. Это не точный ответ на ваш вопрос, но методика может быть применима.

person user944849    schedule 02.10.2012