1

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

// @UKA_GENERATION_START@

并以

// @UKA_GENERATION_END@

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

站点http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus在“忽略块中的问题”一章中描述了如何完成它。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@!你有什么想法,为什么?

4

2 回答 2

0

您需要在 UI 中进行设置,而不是在参数中。文档中已经对此发出了警告,但我已经使它更加明显。

于 2016-04-13T14:56:32.343 回答
0

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

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!");
于 2017-06-07T07:42:38.943 回答