eclipse 更改maven surefire-plugin的输出目录

dgsult0t  于 2023-10-18  发布在  Eclipse
关注(0)|答案(3)|浏览(153)

我试图改变输出文件夹的XML文件得到生成的surefire插件在一个maven项目。我在report-plugin和maven-site-plugin(在documentation中提到)的配置括号中声明了目标输出文件夹。我还尝试在报告块中声明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>

项目层次结构如下所示:

mec1mxoz

mec1mxoz1#

在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>
3qpi33ja

3qpi33ja2#

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

qq24tv8q

qq24tv8q3#

如果你可以在你的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命令的扩展,如this Stackoverflow question所示。

备注:

  • 通过这种方式,您可以以编程方式随时更改报表输出目录
  • 我尝试过的其他方法都不起作用,比如
  • 在我的脚本中通过-DreportsDirectory =>设置reportsDirectory变量并没有改变它,但是产生了一个警告,说这个变量是read-only
  • 根据文件:编辑pom.xml并使用mvn surefire-report:report -DoutputDirectory=newpath

相关问题