8

我的设置是:

  • 詹金斯 1.448
  • 声纳 2.13
  • 詹金斯声纳插件 1.72
  • Sonar 的 MySql 数据库

我有以下项目:

  • Eclipse 插件项目
  • 使用 Maven
  • 多个模块(父maven项目,源插件项目,测试片段项目)
  • 一个简单的 JUnit 测试,测试源插件项目的一个类

目前的流程是什么:

  • Jenkins 从 SVN 签出父项目
  • Jenkins 使用 Maven 和 Tycho 构建项目及其模块
  • Jenkins 使用 Surefire 执行测试并生成报告
  • Jenkins使用Jenkins Sonar插件启动mvn sonar:sonar执行代码分析
  • 对每个模块进行静态代码分析
  • JaCoCo 失败了

Sonar 具有可用的静态代码分析统计数据,并显示测试成功百分比。唯一缺少的是 JaCoCo 的代码覆盖率……或者甚至可能是 Cobertura 的代码覆盖率。

在这一点上我真的不在乎,我只想要其中一件东西来产生代码覆盖率结果。

Cobertura 似乎无法产生结果,可能是因为 - 它无法检测代码 - 它在错误的位置查找检测的代码 - 它无法处理 Tycho 或单独的源/测试代码设置

JaCoCo 应该能够动态“观察”代码覆盖率,但它的输出是

[INFO] [17:44:04.708] Sensor JaCoCoSensor...
[INFO] [17:44:04.717] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/jobs/testPlugin/workspace/testSource/target/jacoco.exec
[INFO] [17:44:04.854] Sensor JaCoCoSensor done: 146 ms

[INFO] [17:44:10.587] Sensor JaCoCoSensor...
[INFO] [17:44:10.587] Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/jobs/testPlugin/workspace/testTest/target/jacoco.exec
[INFO] [17:44:10.631] Sensor JaCoCoSensor done: 44 ms

[INFO] [17:44:12.402] Sensor JaCoCoSensor...
[INFO] [17:44:12.402] Project coverage is set to 0% as build output directory doesn't exists: /var/lib/jenkins/jobs/testPlugin/workspace/testParent/target/classes
[INFO] [17:44:12.402] Sensor JaCoCoSensor done: 0 ms

我究竟做错了什么?我需要在我的 pom.xml 某处启用 JaCoCo 吗?我需要万无一失吗?我需要做什么才能使用 Cobertura?

4

3 回答 3

3

我找到了一个带有示例 tycho 多模块项目(单独的源和测试项目)的页面。复制一些属性和配置后...

看来我现在使用 maven jacoco 插件来生成 jacoco 代码覆盖率报告,然后告诉 Sonar 在哪里可以找到报告并重用它。

为什么地球上几乎没有这方面的文档?或者为什么这么难找?

https://github.com/Godin/sonar-experiments/tree/master/jacoco-examples/tycho-example

于 2012-01-27T14:50:42.633 回答
3

你可以看看我几个月前写的博客文章:http: //mdwhatever.free.fr/index.php/2011/09/quality-analysis-on-eclipse-plugins-with-tycho-sonar-jacoco -and-swtbot/

于 2012-03-06T23:08:53.840 回答
0

当代码完成检测后,必须在检测生成的特定代码上运行surefire。我没有使用你的设置,但你的错误似乎与我让 Clover 代码覆盖工作时得到的错误非常相似;我必须指出 surefire 以在存储已编译检测代码的目录之外运行测试。

此外,我发现-X在 Maven 命令行上指定该选项非常宝贵,因为在构建期间读取每个插件的日志可以准确显示它在哪里寻找它试图找到的任何东西。

编辑:

必须先编译检测代码,然后才能运行surefire,因此您需要指向编译后目录,而不是检测源本身。

于 2012-01-20T20:03:01.933 回答