我们可以在 maven-surefire-plugin 之前执行 exec-maven-plugin 吗?

Can we execute exec-maven-plugin before maven-surefire-plugin?

是否有可能在 maven-surefire-plugin 之前 运行 exec-maven-plugin,我在 运行 期间观察到 maven-surefire-plugin 正在执行,即使顺序在标签是第二个。我的方案是执行 JAVA CLASS (使用 exec-maven-plugin )生成我的 testng.xml 并且可以 运行 使用(maven-surefire-plugin)。

首先,如果 exec-maven-plugin 的执行绑定到 test 阶段,则此执行在 maven-surefire-plugin 之后执行是正常的。原因是您可能正在处理将 jarwhich has a default binding of the Surefire Plugin 打包到 test 阶段的项目。这个默认执行始终是第一个被调用的,无论插件在 POM 中的何处声明。在日志中,您会发现此执行的 ID 为 default-test.

有一种方法可以利用 the phases invoked before the phase test 在测试 运行 之前执行操作。在您的情况下,您的目标是生成测试资源 testng.xml,因此使用 generate-test-resources 阶段是合适的,其目的是创建测试所需的资源。因此,您只需指定

<phase>generate-test-resources</phase>

执行 exec-maven-plugin 生成 testng.xml

然后,您可以将生成的 testng.xmlsuiteXmlFiles element, see Using Suite XML Files

我是这样实现的:

  1. 我添加了测试 script/java main class,我想在 Cucumber 测试套件之前执行,在以下文件夹中: enter image description here

  2. 在 POM.xml 中添加了以下...

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>

            <execution>
                <phase>process-resources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>

                        <source>src/test/java/BeforeSuite</source> <!-- source folder where Before Suite scripts are saved -->
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <executions>

            <execution>
                <id>before-test-suite-scripts</id>
                <phase>generate-test-resources</phase>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>BeforeSuite.HelloBeforeSuiteScript</mainClass> <!-- <packagename>.<className> -->
                </configuration>
            </execution>
        </executions>
    </plugin>

当 运行 宁 mvn clean verify 时,测试套件脚本将在 运行 之前执行测试套件。 enter image description here