Как добавить фазу до и после интеграции в плагин maven-failsafe-plugin
Я имею дело с тем, что сервер приложений netty необходимо запустить на этапе тестирования перед интеграцией и остановить его на этапе тестирования после интеграции для целей тестирования IntegrationTests. Я использовал maven-failsafe-plugin
, Но я не знаю, как выполнить основной класс на этапе предварительной интеграции и как остановить сервер после выполнения. Также мой основной класс находится в подмодуле проекта. Я создал профиль для запуска IntegrationTest в родительском пом.
<profile>
<id>integration-tests</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>application_module1</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/it/java</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-resource</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/it/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
1 ответ
Интересный вопрос, потому что он похож на мой недавний вопрос о том же, что и со встроенным экземпляром postgres.
В соответствии с предложением @Tunaki для меня и из моих исследований, я не верю, что у вас есть простой способ получить maven-failsafe-plugin
инициировать процесс запуска сервера без настройки / разветвления самого кода отказоустойчивого плагина (что я бы не рекомендовал).
Возможно, лучшим вариантом будет сделать что-то похожее на то, что я делаю для моей службы, встроенной в postgres: создать новый, довольно простой плагин для инициализации сервиса netty. Обратитесь к выбранному ответу @ Tunaki.
Основываясь на совете @Tunaki и следуя этому довольно простому руководству по плагину maven, я создал небольшой проект Java (плагин Maven), который состоит из:
- плагин pom (используя плагин сборки maven-plugin-plugin 3.4)
- Мой класс обслуживания Java, который содержит код для запуска, поддержания состояния процесса сервера и остановки процесса сервера.
Два Mojo (классы Java) включены для моего процесса запуска и один для моего процесса остановки, которые, в частности, аннотированы следующим образом:
@Mojo (name = "startpostgres", defaultPhase = LifecyclePhase.PRE_INTEGRATION_TEST) открытый класс StartPostgresMojo расширяет AbstractMojo
Мой плагин pom начинается так:
<groupId>my.group.id</groupId>
<artifactId>postgres-maven-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.4</version>
</plugin>
</plugins>
</build>
Похоже, что делать что-то подобное с вашим сервером приложений Netty может работать на вас.
Еще одна вещь, которую вы можете сделать, это подключить плагин maven cargo и попытаться добавить собственную поддержку сервера приложений netty, поскольку это не относится к текущим поддерживаемым контейнерам для груза.