【问题标题】:Why should run first mvn clean clover2:setup install clover2:clover, then: mvn sonar:sonar为什么要先运行 mvn clean clover2:setup install clover2:clover,然后:mvn sonar:sonar
【发布时间】:2016-07-17 21:25:41
【问题描述】:

基于问题Sonar + Clover only runs on src-instrumented,建议先使用mvn clean clover2:setup install clover2:clover,然后:mvn sonar:sonar。

想知道为什么我们不能使用 mvn clean clover2:setup install clover2:clover sonar:sonar?

【问题讨论】:

  • 恭喜您的第一篇文章!欢迎来到这个美妙的社区。 - 莎拉:P(是的,我们彼此认识)

标签: sonarqube clover sonarqube-scan


【解决方案1】:

过去推荐单独运行目标sonar:sonar。自从 SonarQube Scanner for Maven 停止尝试运行单元测试 + 通过分叉一个新的 Maven 生命周期为您收集覆盖率后,这种情况就不再存在了。

一般建议现在是在单个命令中运行目标。例如mvn clean package sonar:sonar

在 Clover 的情况下,clover:setup 目标将改变 Maven 模型以使所有其他插件(如surefire)使用检测类而不是原始源代码。这确实是一个问题,因为它会阻止 SonarQube 匹配类文件。因此,在您的情况下,您应该坚持两个独立的目标,或者手动配置 sonar.sources 以引用原始源代码。

【讨论】:

  • 感谢您的回答。但是我的问题是,如果我在一个命令中运行所有目标,则仪表板中的单元测试覆盖率是空白的。我必须单独运行它们以确保显示单元测试覆盖率。这与 SonarQube 版本或 sonar maven 插件版本有关吗?从声纳文档中可以看出,如果使用 4.5 之前的 SonarQube 实例,您应该使用 maven-sonar-plugin 2.6,而我们公司使用的是 SonarQube 版本 4.3.2。
  • 谢谢,这个解释很有道理!
【解决方案2】:

对比了maven的日志,找到了可能的原因:

“mvn clean clover2:setup install clover2:clover sonar:sonar”似乎无法找到源目录。日志显示它使用 ${project}\target\clover\src-instrumented 和 ${project}\target\generated-sources\annotations 作为源目录。

如果明确指定 src/main/java,那么这个单一的命令效果很好。唯一棘手的是为什么单独运行目标不需要指定 sonar.sources 但插件仍然可以为源目录找到正确的文件夹。

【讨论】:

  • sonar:sonar 将从 Maven 模型(Maven 插件 API)获取默认值 sonar.sources。 Clover 正在改变模型(可能是为了让其他插件(如surefire)使用检测类)。所以我会更新我的答案。
猜你喜欢
  • 2016-11-11
  • 2018-10-08
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2013-05-12
  • 2021-04-23
  • 2013-11-16
相关资源
最近更新 更多