为什么要运行先mvn clean clover2:setup install clover2:clover,然后:mvn sonar:sonar

Why should run first mvn clean clover2:setup install clover2:clover, then: mvn sonar:sonar

基于问题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?

过去,这是实现 运行 目标 sonar:sonar 的推荐方式。自从 SonarQube Scanner for Maven 停止尝试 运行 单元测试 + 通过分叉新的 Maven 生命周期为您收集覆盖率后,情况就不再如此了。

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

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

对比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 但插件仍然可以为源目录找到正确的文件夹。