SonarQube version: 4.5
我创建了一个基于sonar-xoo-plugin的Java项目 . 然后我添加了一个简单的规则,它在 visitMethod(MethodTree)
中继承 BaseTreeVisitor
和 always raises an issue . 我在 @Rule(key = "x1")
中使用 @Rule(key = "x1")
注释了该类,并在存储库中创建新规则时在类 MyRulesDefinition
中使用了相同的键 .
我构建了项目,将jar文件放入plugins文件夹并启动了声纳服务器 . 插件已加载,规则已存在 . 我为选定的质量配置文件激活它并运行分析但是 no issues were found by the rule.
我究竟做错了什么? MyRulesDefinition
中的规则模板如何映射到规则的逻辑?
是否存在使用最新API的SonarQube插件的任何其他示例?
3 回答
不,我今天遇到了完全相同的问题,找不到任何问题 . 但这是解决方案:
创建一个实现
RulesDefinition
的类 - >它是ServerExtension
,其唯一目的是使您的自定义规则显示在SonarQube 's UI if you' ve中明确提供定义(以编程方式,或在XML文件中,或通过注释) . 此扩展在服务器启动时加载 .创建一个实现
BatchExtension
和JavaFileScannersFactory
的类 - >其目的是通过返回规则实例在批处理分析期间使所有自定义Java规则可用 . 在分析期间加载此扩展 .创建一个扩展SonarPlugin的类,该类返回在上面的第1点和第2点中创建的扩展 .
然后,您的自定义规则将在UI和分析期间可用 . 如果您不这样做,您将无法激活/配置它们 . 如果您忘记2,它们将是可激活/可配置的,但永远不会被执行(并且不会出现任何错误)
与
RulesRepository
略有不同:您的CustomRulesRepository
扩展RulesRepository
可以直接实现BatchExtension和JavaFilesScanner
.我在github上公开了示例示例(基于gradle):https://github.com/misak69/misak69-sonar-custom . 所有重要事实均基于@kraal之前的回答 . 随意寻找https://github.com/misak69/misak69-sonar-custom/blob/master/README.md
你可以看一下Java Custom Rules example plugin . 这个应该给你所需的所有答案 .