我正在尝试更改 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>
如有任何帮助,我们将不胜感激,并提前感谢您的努力
在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>
根据文档,您必须使用 reportsDirectory 而不是不存在的
outputDirectory
。
如果您可以在 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 命令一样,您可以 执行以下操作。
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>
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
我使用
作为=
命令的分隔符,如这个 Stackoverflow 问题所示。sed
备注:
-DreportsDirectory
=> 在我的脚本中设置 reportsDirectory 变量并没有改变它,但产生了一个警告,说这个变量是 read-only
mvn surefire-report:report -DoutputDirectory=newpath