2017-02-28 96 views
0

我正在为使用多个Maven项目/模块来创建最终将成为一个产品的公司工作。帮我解释一下,想象类似的文件结构如下:多个Maven项目,单个JaCoCo站点?

- 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服务器上的单个文件夹中,然后将索引页面链接到一起,但最多只能是“笨拙”。例如:

- Web Server 
    - index.html 
    - Project_1 
      - (Generated report files) 
    - Project_2 
      - (Generated report files) 

任何更好的建议将不胜感激。

+0

也许使用Ant Task(http://www.jacoco.org/jacoco/trunk/doc/ant.html)来生成报告,比Maven Plugin提供更大的灵活性? – Godin

回答

2

JaCoCo目前没有提供简单的方法来实现此目的。然而,他们这样做指定此处介绍三种选择:https://github.com/jacoco/jacoco/wiki/MavenMultiModule

他们最合适的方法包括创建一个包含所有其它模块的依赖一个独立的记者模块(被称为战略GitHub的文章:模块使用依赖 )。

记者模块使用maven目标获取所有单个报告并将它们绑定到一起。

一个例子项目:

https://prismoskills.appspot.com/lessons/Maven/Chapter_06_-_Jacoco_report_aggregation.jsp

+0

非常翔实的答复,谢谢。 – Scarfe

1

有您能与IMO

去许多不同的方法

所有你可能要考虑像声纳,这样你就会编译所有的第一你的模块,并将运行一个声纳,将检查其他事情的覆盖面。 Sonar会将结果上传到声纳服务器(包括数据库和所有内容),以便您能够在UI中看到出错的地方

另一种方法是只需要滚动您自己的Maven插件(假设您正在使用行家)。如果我没有弄错,jacoco生成的报告也是一个XML报告。因此,它可以很容易地被解析 因此,可以编写一个maven插件来识别所有像这样的报告,解析它们并提供一些统一的视图。

另一种方法是当覆盖率未达到某个阈值时导致整个构建失败。我知道,它不直接回答你的问题,但如果你这样做,你会保证最低水平的覆盖率(可以随时在项目水平上增加)

希望这有助于提供一些额外的指导。