我正在为一家使用多个Maven项目/模块的公司工作,以创建最终将成为一种产品的公司。为了帮助我解释,想象一下类似于下面的文件结构:
- Parent Directory
- Project_1
- /src/
- /target/
- POM.xml
- Project_2
- /src/
- /target/
- POM.xml
在此过程中,我们使用JUnit对我们的代码进行单元测试,这是一个重要的合同要求,我们通过测试实现了超过一定百分比的代码覆盖率阈值。
我们正在使用 JaCoCo 以HTML网站的形式生成报道报告。 JaCoCo本身被证明是非常宝贵的,但我们遇到的一个主要问题是,这会在/target/site/jacoco/
目录下创建一个单独的站点。
我自己做了一些调查,发现除非我弄错了,否则JaCoCo默认不支持将多个Maven项目融合到一个JaCoCo报告中的能力。
所以我的问题是,是否有人可以提出替代解决方案 - 这将使我们能够将多个报告汇聚到一个Web服务器上?
我们的一个选择是将所有网站移动到网络服务器上的单个文件夹中,然后将索引页面链接在一起,但它的笨拙"最好。例如:
- Web Server
- index.html
- Project_1
- (Generated report files)
- Project_2
- (Generated report files)
非常感谢任何更好的建议。
答案 0 :(得分:5)
截至今天,JaCoCo没有提供一种简单的方法。但是,它们确实指定了此处描述的三个备选方案:https://github.com/jacoco/jacoco/wiki/MavenMultiModule
他们最合适的方法是创建一个单独的报告模块,其中包含所有其他模块的依赖关系(github文章中的,称为策略:具有依赖关系的模块)。
记者模块使用 jacoco:report-aggregate (http://www.eclemma.org/jacoco/trunk/doc/report-aggregate-mojo.html)maven目标来获取所有单个报告并将它们绑定为一个。
示例项目:
https://prismoskills.appspot.com/lessons/Maven/Chapter_06_-_Jacoco_report_aggregation.jsp
答案 1 :(得分:1)
您可以使用许多不同的方法。
首先,您可能需要考虑像Sonar这样的东西,这样您就可以编译所有模块并运行一个Sonar来检查覆盖范围等。 Sonar将获取结果并上传到声纳服务器(使用数据库和所有内容),这样您就可以在UI中看到出了什么问题
另一种方法是滚动你自己的Maven插件(假设你正在使用Maven)。如果我没有弄错的话,jacoco生成的报告也是一份XML报告。所以它可以很容易地解析。因此,可以编写一个Maven插件来识别所有这样的报告,解析它们并提供统一的视图。
另一种方法是在覆盖范围未达到某个阈值时导致整个构建失败。我知道,它没有直接回答你的问题,但如果你这样做,你就可以保证最低的覆盖水平(可以在项目层面不时增加)。