Maven: Как запустить некоторые тесты после фазы «install», во время «release: prepare»? - PullRequest
3 голосов
/ 23 апреля 2019

У меня есть несколько сложных тестов, которые используют автономные проекты Maven для проверки некоторого кода.Эти проекты Maven программно упаковываются тестами, а полученные файлы .jar затем используются.В этих проектах используются артефакты из моего основного многомодульного проекта в текущей версии , в их pom.xml.Другими словами, тестовые проекты Maven должны иметь возможность находить артефакты, предоставленные моим основным проектом.

В IDE все работает нормально, так как текущие артефакты из моего основного проекта разрешаются динамически (локальный репозиторий не требуется)) когда я запускаю тесты.Кроме того, я могу установить эти версии SNAPSHOT перед запуском тестов.Но когда я хочу выпустить новую версию своего проекта, мне нужно release:prepare чтобы:

  • обновить версии (удалить все «-SNAPSHOT»).
  • Запускаетсявсе тесты, которые не заканчиваются на *.PostInstallTest.java.
  • Упакуйте артефакты и установите их локально.
  • Затем запускаются тесты, заканчивающиеся на *.PostInstallTest.java, так какТесты требуют доступа к ранее установленным артефактам!Если тесты не пройдут, никакие коммиты не будут нажаты release:prepare.

Я знаю, что это не идеально, поскольку «плохая» версия артефактов может быть установлена ​​локально, когда тесты «PostInstallTest»потерпеть поражение.Но я бы предпочел, чтобы эти тесты вообще не запускались!

В настоящее время моя единственная рабочая идея - установить системное свойство при использовании профиля release, а файлы *.PostInstallTest.java сами отключить.если это свойство существует.Таким образом, эти тесты все равно будут работать при запуске внутри моей IDE (без профиля release), но не будут выполняться вообще во время команды release:prepare.Но, опять же, я хотел бы, чтобы они были выполнены.

Я посмотрел на prepareGoals конфигурацию подключаемого модуля Maven Release, но я не уверен, как он может мне помочь.Я также посмотрел на Maven Failsafe Plugin , но, похоже, он не поддерживает фазу "установки".

Итак, мой вопрос : есть ли способзапустить некоторые тесты после фазы "установки", когда используется release:prepare (или на стадии "установки", но после плагина по умолчанию)?

ОБНОВЛЕНИЕ: Вот краткая схема, если она может помочь понять, что происходит:

enter image description here

ОБНОВЛЕНИЕ 2 : я не сделалВ конце концов, проверьте правильность Failsafe.Он работает на этапе «установки»!Посмотрите на ответ df778899.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Проверьте следующие настройки. Для выполнения установки требуется preparationGoals. В конфигурации отказоустойчивого плагина я настроил его запуск на этапе установки.

Я полагаю, что варианты этого подхода также будут работать нормально - вы можете попробовать отменить привязку отказоустойчивой на любой фазе (фаза установлена ​​на None) и вызвать ее явно в preparationGoals (возможно, для этого потребуется некоторая дополнительная конфигурация, такая как идентификатор выполнения, но Я думаю, что вы можете продолжить с этого момента).

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
                <preparationGoals>clean verify install</preparationGoals>
            </configuration>
            <dependencies>
                <dependency>
                    <!-- Specify the version of maven-scm-plugin to avoid https://issues.apache.org/jira/browse/SCM-682
                    (Maven release fails when releasing from a named branch)
                    -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-plugin</artifactId>
                    <version>1.9.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

Вывод (отредактированный немного, чтобы уменьшить шум) показывает, что такты проверки, запущенные preparationGoals, выполняются после установки.

[INFO] --- maven-release-plugin:2.5.3:prepare (default-cli) @ demo ---
...
[INFO] Checking dependencies and plugins for snapshots ...
What is the release version for "demo"? (com.example:demo) 0.0.1: :
What is SCM release tag or label for "demo"? (com.example:demo) demo-0.0.1: :
What is the new development version for "demo"? (com.example:demo) 0.0.2-SNAPSHOT: :
[INFO] Transforming 'demo'...
[INFO] Not generating release POMs
[INFO] Executing goals 'clean verify install'...
[WARNING] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] [INFO] Scanning for projects...
[INFO] [INFO]
[INFO] [INFO] --------------------------< com.example:demo >--------------------------
[INFO] [INFO] Building demo 0.0.1
[INFO] [INFO] --------------------------------[ jar ]---------------------------------
[INFO] [INFO]
[INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ demo ---
[INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ demo ---
[INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ demo ---
[INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ demo ---
[INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ demo ---
[INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ demo ---
[INFO] [INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ demo ---
[INFO] [INFO] --- spring-boot-maven-plugin:2.1.4.RELEASE:repackage (repackage) @ demo ---
[INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ demo ---
[INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ demo ---
[INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ demo ---
[INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ demo ---
[INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ demo ---
[INFO] [INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ demo ---
[INFO] [INFO] Building jar: demo-0.0.1.jar

[INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ demo ---
[INFO] [INFO] Installing demo-0.0.1.jar to 

[INFO] [INFO] --- maven-failsafe-plugin:2.22.1:integration-test (default) @ demo ---
[INFO] [INFO]
[INFO] [INFO] --- maven-failsafe-plugin:2.22.1:verify (default) @ demo ---
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESS
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 13.784 s

[INFO] Checking in modified POMs...
1 голос
/ 25 апреля 2019

Я не думаю, что это пока ответ, но, если говорить о точке зрения @ Lesiak, плагин Failsafe выглядит прекрасно сам на этапе установки.Например:

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Результаты этого вывода:

...
[INFO] --- maven-install-plugin:2.4:install (default-install) @ it-test ---
[INFO] Installing ...\target\it-test-0.0.1-SNAPSHOT.jar to ...\.m2\repository\group\it-test\0.0.1-SNAPSHOT\it-test-0.0.1-SNAPSHOT.jar
[INFO] Installing ...\pom.xml to ...\.m2\repository\group\it-test\0.0.1-SNAPSHOT\it-test-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-failsafe-plugin:3.0.0-M3:integration-test (default) @ it-test ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TheIT
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.093 s - in TheIT
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:3.0.0-M3:verify (default) @ it-test ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

Обратите внимание, как цели maven-failsafe-plugin:3.0.0-M3:integration-test и maven-failsafe-plugin:3.0.0-M3:verify выполняются в конце - в фазе install.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...