我们在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@
之间的代码块!
你知道吗,为什么?
答案 0 :(得分:0)
您需要在UI中设置它,而不是在参数中设置它。在文档中已经有关于此的警告,但我已经使它更加引人注目。
答案 1 :(得分: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!");