Java 如何向maven failsafe插件添加集成前和集成后阶段

Java 如何向maven failsafe插件添加集成前和集成后阶段,java,maven,integration-testing,pom.xml,maven-failsafe-plugin,Java,Maven,Integration Testing,Pom.xml,Maven Failsafe Plugin,我有一个netty应用程序服务器需要在集成前测试阶段启动,并在集成后测试阶段停止,以便进行集成测试。我使用了maven故障保护插件。但是我不知道在预集成测试阶段执行主类,以及在执行之后如何停止服务器。我的主类也位于项目的子模块中。我已经创建了一个概要文件,用于在父pom中运行IntegrationTest <profile> <id>integration-tests</id> <activation>

我有一个netty应用程序服务器需要在集成前测试阶段启动,并在集成后测试阶段停止,以便进行集成测试。我使用了
maven故障保护插件
。但是我不知道在预集成测试阶段执行主类,以及在执行之后如何停止服务器。我的主类也位于项目的子模块中。我已经创建了一个概要文件,用于在父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
org.apache.maven.plugins
maven surefire插件
2.14.1
真的
org.codehaus.mojo
构建助手maven插件
1.9.1
添加源
生成源
添加测试源
src/it/java
添加资源
生成源
添加测试资源
src/it/resources
org.apache.maven.plugins
maven故障保护插件
2.19.1
**/*IT.java
集成测试
验证

这是一个有趣的问题,因为它类似于我最近提出的关于用计算机做同样事情的问题

根据@Tunaki给我的建议,并且根据我的研究,我不认为有一种简单的方法可以让
maven failsafe插件
启动服务器启动过程,而无需定制/分叉failsafe插件代码本身(我不推荐)

也许更好的选择是像我为我的postgres嵌入式服务需求所做的那样:创建一个新的、相当简单的插件来初始化netty服务。参考@Tunaki的选择

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

  • 插件pom(使用maven插件3.4构建插件)
  • 我的java服务类,包含启动、维护服务器进程状态和停止服务器进程的代码
  • 两个Mojo(Java类)用于启动进程,一个用于停止进程,注释如下:

    <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> 
    
    @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> 
my.group.id
并尝试添加您自己对netty app server的支持,因为这不是当前支持的货物集装箱的支持