我正在尝试通过遵循步骤here来生成Jacoco代码覆盖率汇总报告。
我最初的maven项目可能包含多个模块,并且我通过代码将聚合器模块aggregator
动态添加到主pom中。
文件夹结构看起来像这样(主项目中可以有任意数量的模块和子模块):
/SampleProject/
-- pom.xml
-- module1/
---- pom.xml
---- src/
-- module2/
---- pom.xml
---- src/
-- module3/
---- pom.xml
---- src/
-- aggregator/
---- pom.xml
这是主要pom:
SampleProject / pom.xml 。 (这里,通过我的代码动态添加了聚合器模块)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>sampleProject</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>sampleProject</name>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
<module>aggregator</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
每个模块都有自己的pom.xml。聚合器pom(由我的代码生成)看起来像这样(每个模块都作为依赖项添加到此pom中。此信息是从模块的各个pom中获取的):
aggregator / pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sample</groupId>
<artifactId>sampleProject</artifactId>
<version>1.0</version>
</parent>
<artifactId>aggregator</artifactId>
<dependencies>
<dependency>
<groupId>com.sample.module1</groupId>
<artifactId>module1</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.sample.module2</groupId>
<artifactId>module2</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.sample.module3</groupId>
<artifactId>module3</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>${argLine} -Xms256m -Xmx2048m</argLine>
<forkCount>1</forkCount>
<runOrder>random</runOrder>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>report-aggregate</id>
<phase>test</phase>
<goals>
<goal>report-aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
并且,为了生成汇总报告,我使用以下命令:
mvn clean test -DskipTests=false
这将在“ aggregator / target / site / jacoco-aggregate / index.html”中生成汇总报告
现在,问题是如果仅聚合器构建出现问题,并且构建失败(但是所有其他模块的构建都成功)。然后,Maven输出将如下所示:
[INFO] module1 .......................................... SUCCESS [ 2.197 s]
[INFO] module2 .......................................... SUCCESS [ 11.287 s]
[INFO] module3 .......................................... SUCCESS [ 6.969 s]
[INFO] aggregator ....................................... FAILURE [ 1.241 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 00:21 min
[INFO] Finished at: 2018-07-26T13:01:12-07:00
[INFO] Final Memory: 258M/1149M
这意味着如果仅聚合器部分失败,则整个构建也将标记为失败。这会导致部署管道中的下一步出现问题。
因此,我想要的是即使聚合器构建失败,也应将整个构建标记为已通过(即忽略失败的聚合器构建),以便我可以继续进行下一步部署,以便不生成代码覆盖率报告不会使我的整个部署过程失败。 (我将在此过程的稍后部分处理缺少的代码覆盖率报告)。
有什么办法可以做到这一点?任何帮助将不胜感激。
更新1 :
我已经检查了this的答案,这不是我想要的。在maven中使用-fae
标志仍会将构建标记为最终失败。
此外,我也不想要-fn
标志,因为那样的话,我也将忽略模块中实际的构建失败,这是不希望的。
我正在寻找一种忽略Maven中仅一个模块的故障的方法。
我不确定是否可以这样做,也欢迎其他建议。
更新2 :
更新和一些背景信息。
因此,我正在将该工具构建为一种可在所有项目上运行的中央工具,因此它应该足够通用,以适应不同类型的配置,而无需更改主项目(正在运行测试的项目) )。
截至目前,看来我要找的东西是不可能的。因此,作为一种解决方法,我要求主项目的所有者包括一个配置文件,该文件告诉我的工具要包括哪些软件包以进行代码覆盖。
如果我找到更好的解决方案或解决方法,请在这里更新。