如何在SonarQube 4.5的插件中注册自定义规则?

时间:2014-10-28 13:29:55

标签: java sonarqube sonar-runner

SonarQube版本:4.5

我基于sonar-xoo-plugin创建了一个Java项目。 然后我添加了一个简单的规则,继承BaseTreeVisitor始终在visitMethod(MethodTree)中引发问题。我使用@Rule(key = "x1")对类进行了注释,并在存储库中创建新规则时在类MyRulesDefinition中使用了相同的键。

我构建了项目,将jar文件放入plugins文件夹并启动了声纳服务器。插件已加载,规则已存在。我为选定的质量配置文件激活了它并进行了分析,但是规则没有发现任何问题。

我做错了什么? MyRulesDefinition中的规则模板如何映射到规则的逻辑?

是否存在使用最新API的SonarQube插件的任何其他示例?

3 个答案:

答案 0 :(得分:3)

  

是否存在使用最新API的SonarQube插件的任何其他示例?

不,我今天遇到了完全相同的问题而无法找到任何问题。但这是解决方案:

  1. 创建一个实现RulesDefinition - >的类它是ServerExtension,其唯一目的是让您的自定义规则显示在SonarQube的UI中,如果您已明确提供定义(以编程方式,或在XML文件中或通过注释)。此扩展在服务器启动时加载。
  2. 创建一个实现BatchExtensionJavaFileScannersFactory - >的类其目的是通过返回规则实例,在批处理分析期间使所有自定义Java规则可用。在分析期间加载此扩展名。
  3. 创建一个扩展SonarPlugin的类,该类返回在上面第1点和第2点创建的扩展。
  4. 您的自定义规则将在UI和分析期间可用。如果你不做,1。你将无法激活/配置它们。如果您忘记2,它们将是可激活/可配置的,但永远不会执行(并且不会出现任何错误)

    RulesRepository略有不同:您的CustomRulesRepository扩展RulesRepository可以直接实现BatchExtension和JavaFilesScanner

答案 1 :(得分:3)

我在github上展示了示例示例(基于gradle):https://github.com/misak69/misak69-sonar-custom。所有重要事实均基于@kraal之前的回答。随意查找https://github.com/misak69/misak69-sonar-custom/blob/master/README.md

答案 2 :(得分:0)

您可以查看Java Custom Rules example plugin。这个应该给你所需的所有答案。