更改maven Surefire-plugin的输出目录

问题描述 投票:0回答:3

我正在尝试更改 Maven 项目中的 Surefire 插件生成的 XML 文件的输出文件夹。我在报告插件的配置括号内以及 maven-site-plugin 中指定了目标输出文件夹(在文档中提到)。 我还尝试在报告块中声明 maven-site-plugin,但这似乎不起作用。我的 XML 文件总是写入默认的 Surefire-reports 文件夹中。

我的 pom.xml 有以下条目:

    <reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <showSuccess>true</showSuccess>
                <outputDirectory>${basedir}/pb-reporting/test-output</outputDirectory>
                <!--<skipSurefireReport>true</skipSurefireReport>-->
            </configuration>
        </plugin>                   </plugins>  </reporting>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <!--<executable>/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95-2.6.4.0.el7_2.x86_64/bin/javac</executable>-->
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.7.1</version>
            <configuration>
                <outputDirectory>${basedir}/pb-reporting/test-output</outputDirectory>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin> </plugins> </build>

项目层次结构如下所示:

如有任何帮助,我们将不胜感激,并提前感谢您的努力

eclipse reporting maven-surefire-plugin
3个回答
5
投票

在surefire-reports-plugin和maven-site-plugin中配置输出目录是不够的。解决方案是在构建块内的 maven-surefire-plugin 中声明 reportsDirectory :

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <reportsDirectory>${basedir}/pb-reporting/test-output</reportsDirectory>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>

2
投票

根据文档,您必须使用 reportsDirectory 而不是不存在的

outputDirectory


0
投票

如果您可以在 pom.xml 中硬编码您的报告输出目录,以下内容绝对足够了:

<build>
   <plugins>
      <!-- The Maven Surefire Plugin is responsible for running JUnit tests and generating reports
      Configure the reports output directory option, so we can overwrite it in a CI/CD pipeline-->
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>3.1.0</version>
         <configuration>
            <reportsDirectory>your/dream/path</reportsDirectory>
         </configuration>
      </plugin>
   </plugins>
</build>

但是,如果您需要动态设置报告输出目录,就像在 CI/CD 管道中使用 bash 命令一样,您可以 执行以下操作

  1. 在 pom.xml 文件中使用占位符配置
    maven-surefire-plugin
    的 reportsDirectory 选项:
<build>
   <plugins>
      <!-- The Maven Surefire Plugin is responsible for running JUnit tests and generating reports
      Configure the reports output directory option, so we can overwrite it in a CI/CD pipeline-->
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>3.1.0</version>
         <configuration>
            <reportsDirectory>set-in-pipeline</reportsDirectory>
         </configuration>
      </plugin>
   </plugins>
</build>
  1. 在执行
    mvn test
    之前,将
    pom.xml
    文件中的占位符替换为所需的报告输出目录。此示例适用于类 UNIX shell,例如
    bash


    这里我将
    <reportsDirectory>set-in-pipeline</reportsDirectory>
    替换为
    <reportsDirectory>${project.basedir}/desiredReportsOutputDirectory</reportsDirectory>
sed -i -e 's=<reportsDirectory>set-in-pipeline</reportsDirectory>=<reportsDirectory>${project.basedir}/desiredReportsOutputDirectory</reportsDirectory>=g' pom.xml

我使用

=
作为
sed
命令的分隔符,如这个 Stackoverflow 问题所示。

备注:

  • 通过这种方式,您可以随时以编程方式更改报告输出目录
  • 我尝试过的其他方法不起作用,例如
    • 通过
      -DreportsDirectory
      => 在我的脚本中设置 reportsDirectory 变量并没有改变它,但产生了一个警告,说这个变量是
      read-only
    • 遵循 文档:编辑 pom.xml 并使用
      mvn surefire-report:report -DoutputDirectory=newpath
© www.soinside.com 2019 - 2024. All rights reserved.