我们的声纳构建环境详情如下:
我们的SonarQube服务器是集中式服务器,所以安装了(cxx-plugin,objective-c-plugin和csharp-plugin)
当前问题:
当我们扫描代码时,如果失败并出现以下错误。由于我们有多种语言(C#和C ++)代码,因此必须一次扫描该语言。
ERROR: Caused by: Language of file 'workspace/HS30/baseclasses/ametex.h' can not be decided as the file matches patterns of both sonar.lang.patterns.c++ : **/*.cxx,**/*.cpp,**/*.cc,**/*.c,**/*.hxx,**/*.hpp,**/*.hh,**/*.h and sonar.lang.patterns.objectivec : **/*.h,**/*.m
sonar.language = cs,c ++(尝试过但没有用)
请帮助我们解决问题。
答案 0 :(得分:6)
这是一个关于哪种语言"声称" .h
个文件。只有一种语言可以声明任何给定的文件扩展名,目前您有两种语言声称.h
,因此扫描程序无法确定将这些文件提供给哪些分析器并放弃。
具体来说,从您的错误消息:
the file matches patterns of both sonar.lang.patterns.c++ : **/*.cxx,**/*.cpp,**/*.cc,**/*.c,**/*.hxx,**/*.hpp,**/*.hh,**/*.h and sonar.lang.patterns.objectivec : **/*.h,**/*.m
您同时cxx
和objectivec
声明.h
。您必须从这两个列表中的一个删除扩展名。
转到(全局)管理> [语言]> [语言]文件后缀可修改每种语言所声明的扩展程序,并从一种或两种语言中删除.h
。
确保不要将这两个字段留空。如果留空,将使用默认值(包括.h
)。
答案 1 :(得分:0)
理论上,最简单的方法是配置模式,以便* .h文件只与一种语言匹配,即通过将选项 sonar.lang.patterns.objectivec 设置为空。
实际上,这将是对ObjectiveC的牺牲分析,也许您可以重新考虑您的项目结构或运行两个单独扫描两种语言的Sonar构建?
答案 2 :(得分:0)
我执行 sonar.lang.patterns.c=""
来清空 C 扩展,只保留 C++ 扩展。您需要知道要保留哪一个,例如 sonar.lang.patterns.objectivec=""
删除目标 C 的那些。