Запуск exec-maven-плагина несколько раз в одной фазе
Я пытаюсь протестировать клиент / серверное приложение и использовать Maven для обработки сборки/тестирования/развертывания. Чтобы протестировать приложение, мне нужно:
- запустите сценарий установки (для установки сервера),
- запуск команды запуска (для запуска службы),
- запустите тест (maven-surefire-plugin),
- остановить службу, и
- удалить службу.
шаги 1,2,4 и 5 будут использовать Maven-exec-plugin. Шаг 3 будет использовать maven-surefire-плагин.
проблема в том, что все 5 из этих шагов будут происходить в фазе "тест". Maven позволяет плагинам выполняться в определенном порядке. exec-plugin можно запускать несколько раз, используя несколько записей. Проблема в том, что мне нужно использовать плагин surefire в середине выполнения 4 exec-plugin.
кто-нибудь когда-либо сталкивался с этим раньше или знал, как структурировать плагин и выполнение?
2 ответов
то, что вы пытаетесь сделать, больше похоже на интеграционный тест, чем тест. Для этого случая использования жизненный цикл maven по умолчанию имеет три этапа, связанные с интеграционным тестированием:
- 
pre-integration-test: выполните действия, необходимые перед выполнением интеграционных тестов. Это может включать такие вещи, как создание необходимой среды.
- 
integration-test: при необходимости обработайте и разверните пакет в среде, где интеграционные тесты могут быть бежать.
- 
post-integration-test: выполните действия, необходимые после выполнения интеграционных тестов. Это может включать очистку окружающей среды.
плагин surefire обычно выполняется в test фаза, но может быть перенастроена для выполнения в другой фазе. Ваши шаги 1 + 2 могут быть настроены для выполнения в pre-integration-test, в то время как шаги 4 + 5 должны выполняться в post-integration-test.
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <!-- Skip execution in test phase and execute in integration-test phase instead -->
    <configuration>
        <skip>true</skip>
    </configuration>
    <executions>
        <execution>
            <id>surefire-it</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <skip>false</skip>
            </configuration>
        </execution>
    </executions>
</plugin>
вот как я настроил Exec и отказоустойчивые Плагины. Я использую failsafe, а не перенастраиваю surefire, так как surefire все еще запускает другие тесты, чтобы быть на стадии тестирования. Это выполнит шаги 1 и 2 в фазе pre-integrationtest (несколько исполнений, перечисленных для той же фазы, будут выполняться в указанном порядке), запустите тест на фазе integration-test, а затем очистите шаги 3 и 4 на фазе post-integrationtest.
(Примечание: у меня есть команды echo в место реальной установки и команды очистки)
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <forkMode>always</forkMode>
    </configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>step1</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
                <executable>echo</executable>
                <arguments>
                    <argument>foo</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>step2</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
                <executable>echo</executable>
                <arguments>
                    <argument>bar</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>step3</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>post-integration-test</phase>
            <configuration>
                <executable>echo</executable>
                <arguments>
                    <argument>baz</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>step4</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <phase>post-integration-test</phase>
            <configuration>
                <executable>echo</executable>
                <arguments>
                    <argument>woot</argument>
                </arguments>
            </configuration>
        </execution>  
    </executions>
</plugin>
