Отказоустойчивый Maven не жалуется, что был указан несуществующий профиль - PullRequest
0 голосов
/ 05 марта 2020

У меня в профиле два профиля:

 <profiles>
        <profile>
            <id>functional-tests</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <testSourceDirectory>test/test-functional/java</testSourceDirectory>
                            <includes>
                                <include>**/*FT.java</include>
                            </includes>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>it-tests</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <testSourceDirectory>test/test-it/java</testSourceDirectory>
                            <includes>
                                <include>**/*IT.java</include>
                            </includes>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        ...

Я могу активировать каждый из этих двух профилей следующим образом:

 mvn failsafe:integration-test -Pfunctional-tests

 mvn failsafe:integration-test -Pit-tests

Но когда я запускаю это:

 mvn failsafe:integration-test -PrandomWord

Это вызывает it-tests профиль. Мне было интересно, почему и есть ли способ сделать отказоустойчивый плагин выводить что-то вроде нераспознанного профиля.

Спасибо за вашу помощь


Если это имеет значение, вот мой отказоустойчивый плагин:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

1 Ответ

1 голос
/ 06 марта 2020

Отвечая на ваш вопрос о том, почему это вызывает it-tests. Фактически, он не активирует ни один из профилей, поэтому используется конфигурация плагина по умолчанию, которая имеет **/*IT.java в списке включения. Таким образом, он запускает все IT тесты по умолчанию.

Это странный подход к управлению выполнением плагинов по профилям. Я сомневаюсь, что есть разумный способ проверить имена профилей, которые вы описываете. Я бы порекомендовал другой подход здесь.

Подход 1. Используйте <id> и cli с @

Вы можете просто указать два исполнения плагина с помощью id, а затем вы можете сделать это: Как выполнить maven Выполнение плагина непосредственно из командной строки?

 <plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <id>it-tests</id>
            <phase>none</phase> <!-- detach this execution from default lifecycle -->
            <configuration>
                <testSourceDirectory>test/test-it/java</testSourceDirectory>
                <includes>
                    <include>**/*IT.java</include>
                </includes>
            </configuration>
        </execution>
        <execution>
            <id>functional-tests</id>
            <phase>none</phase> <!-- detach this execution from default lifecycle -->
            <configuration>
                <testSourceDirectory>test/test-ft/java</testSourceDirectory>
                <includes>
                    <include>**/*FT.java</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

Теперь вы можете запустить его из командной строки:

mvn failsafe:integration-test@it-tests
mvn failsafe:integration-test@functional-tests

Обновление : указывать не нужно goals, поскольку оно относится только к жизненному циклу, мы в любом случае вводим его в командной строке.

Подход 2. Используйте <skip> и свойства

Сохраняйте оба выполнения как часть жизненного цикла, но управляйте выполнением предоставляя флаги пропуска. Т.е. определить два свойства, например skip.tests.it=true, skip.tests.ft=true и добавить <skip>${skip.tests.ft}</skip> в соответствующие разделы конфигурации. Тогда вы можете просто сделать

# run with no tests by default
mvn verify 

# run with only FT
mvn verify -Dskip.tests.ft=false 

# run with all tests
mvn verify -Dskip.tests.ft=false -Dskip.tests.it=false

, чтобы запустить полный жизненный цикл вместе с нужными тестами.

...