Как добавить фазу до и после интеграции в плагин 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, поскольку это не относится к текущим поддерживаемым контейнерам для груза.

Другие вопросы по тегам