忽略块中的问题

Ignore Issues in Blocks

我们在 SQ 上分析的 Java 文件包含自动生成的代码块。这样的块以

开头
// @UKA_GENERATION_START@

并以

结尾
// @UKA_GENERATION_END@

它们之间的代码行应该被 SQ 忽略。

站点 http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus 在章节 'Ignore Issues in Blocks' 中描述了如何完成。应使用参数 sonar.issue.ignore.block

在我们的环境中,我们使用 Maven 进行项目构建和分析。在项目的 POM 中,我们设置了以下参数:

<sonar.issue.ignore.block>e1</sonar.issue.ignore.block>
<sonar.issue.ignore.block.e1.beginBlockRegexp>\/\/ @UKA_GENERATION_START@</sonar.issue.ignore.block.e1.beginBlockRegexp>
<sonar.issue.ignore.block.e1.endBlockRegexp>\/\/ @UKA_GENERATION_END@</sonar.issue.ignore.block.e1.endBlockRegexp>                

(匹配以上字符串的正则表达式).

不幸的是,SQ 不会从分析中排除 // @UKA_GENERATION_START@// @UKA_GENERATION_END@ 之间的代码块! 你有什么想法,为什么?

您需要在 UI 中进行设置,而不是在参数中进行设置。文档中已经有关于此的警告,但我让它更引人注目。

如何通过省略 // 个字符来简化您的正则表达式?以下配置应该可以正常工作:

sonar.issue.ignore.block=e1
sonar.issue.ignore.block.e1.beginBlockRegexp=@UKA_GENERATION_START@
sonar.issue.ignore.block.e1.endBlockRegexp=@UKA_GENERATION_END@

如上配置,开始和结束标签之间的问题将被忽略

// @UKA_GENERATION_START@

System.out.println("Hello world!");

// @UKA_GENERATION_END@

或者更详细地说...在以下示例中,第 1 行和第 5 行将引发声纳问题,而第 2 - 4 行将被忽略:

1:  System.out.println("Hello world!");
2:  System.out.println("Hello world!");   // @UKA_GENERATION_START@
3:  System.out.println("Hello world!");
4:  System.out.println("Hello world!");   // @UKA_GENERATION_END@
5:  System.out.println("Hello world!");