如何将前后集成阶段添加到maven-failsafe-plugin

时间:2016-10-27 10:39:09

标签: java maven integration-testing pom.xml maven-failsafe-plugin

我需要在预集成测试阶段启动netty应用服务器,并在集成后测试阶段期间停止测试以进行测试IntegrationTests的目的。我用过maven-failsafe-plugin。但我不知道在预集成测试阶段执行主类以及如何在执行后停止服务器。我的主类也驻留在项目的子模块中。我创建了一个用于在父pom中运行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 个答案:

答案 0 :(得分:0)

有趣的问题,因为它类似于我最近关于使用embedded postgres instance做同样事情的问题。

根据@Tunaki对我的建议,以及我的研究,我认为没有一种简单的方法让maven-failsafe-plugin启动服务器启动过程而无需自定义/分析故障安全插件代码本身(我不推荐。)

也许更好的选择是做我喜欢的postgres嵌入式服务需求:为初始化netty服务创建一个新的,相当简单的插件。请参阅@ Tunaki选择的response

基于@Tunaki建议并遵循这个相当容易理解的maven-plugin指南,我创建了一个小型Java(Maven插件)项目,其中包括:

  • 插件pom(使用maven-plugin-plugin 3.4 build plugin)
  • 我的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 plugin并尝试添加您自己对netty app服务器的支持,因为那是 目前支持的货物集装箱