我试图从Sonars静态代码和单元测试覆盖率分析中排除一些自动生成的代码(服务引用)。该项目是C#.Net和Sonar在Windows服务器上通过Jenkins运行。
在我的sonar-project.properties文件中,我可以使用sonar.exclusions属性排除各种其他文件和目录,但这不适用于路径中有空格的文件。
sonar.exclusions=**/Global.asax.cs, **/MyProject/Service References/*
鉴于上面的示例,解决方案中的所有项目都排除了Global.asax.cs文件,但服务引用却没有。
我尝试用单引号和双引号括起路径。 我尝试使用反斜杠来逃避空间。 我已经尝试将路径设置为** / MyProject / Service * / *以利用通配符(可能有风险),但这也不起作用。
有人有解决方案吗?
答案 0 :(得分:6)
我遇到了同样的问题。我需要将项目中的javascript文件“我的项目”排除在文件夹脚本中。我先试了一下:
**/Scripts/**/*.js
这很好,但我意识到它也会排除其他项目中的“Scripts”文件夹。所以我改成了这个:
**/My Project/Scripts/**/*.js
它停止了工作。我的第一直觉是项目名称中的空间应该受到指责。所以我尝试了你做过的同样的事情:
"**/My Project/Scripts/**/*.js"
'**/My Project/Scripts/**/*.js'
**/My\ Project/Scripts/**/*.js
但没有一个有用。
然后我偶然发现了这个论坛:sonarqube-archive.15.x6.nabble.com/Project-exclusions-for-Code-Coverage-not-working-C-td5023058.html
特别是这一行提供了答案:模块(.Net项目)不是完全限定名称的一部分。您必须在模块(.Net项目)级别定义排除项。
这意味着我的错误是项目名称中没有空格,但包括项目名称!我将过滤器更改为:
Scripts/**/*.js
瞧,文件被正确排除了。没有引号或逃避必要。
当然,这仍然会导致另一个项目中的“Scripts”文件夹也被排除在外。此处提供的信息:docs.sonarqube.org/display/SCAN/Excluding+Artifacts+from+the+Analysis可能对此有用。
我使用的是web界面,而不是直接使用配置文件,但这也表明如果你有多个过滤器,那么逗号分隔的列表不应该包含空格(除了实际在路径中的空格),因为它们被字面意思解释。