0

我正在尝试将 .xml 文件中的规则(适用于 Java 和其他语言)导入 SonarQube。我使用了一个示例插件来做到这一点。该示例是从https://github.com/SonarSource/sonar-examples - project sonar-reference-plugin下载的。确实创建了质量配置文件,但没有显示任何规则。 (屏幕图像 SonarQube 个人资料页面)

这是通过使用RulesDefinitionXmlLoader 类加载规则的 Override 方法:

private void defineRulesForLanguage(Context context, String repositoryKey, String repositoryName, String languageKey) {
     NewRepository repository = context.createRepository(repositoryKey, languageKey).setName(repositoryName);

    InputStream rulesXml = this.getClass().getResourceAsStream("/resources/rules-TESTE.xml");
    if (rulesXml != null) {
      RulesDefinitionXmlLoader rulesLoader = new RulesDefinitionXmlLoader();
      rulesLoader.load(repository, rulesXml, StandardCharsets.UTF_8.name());
    }

    repository.done();
  }

  @Override
  public void define(Context context) {
    String repositoryKey = FooLintRulesDefinition.getRepositoryKeyForLanguage(FooLanguage.KEY);
    String repositoryName = FooLintRulesDefinition.getRepositoryNameForLanguage(FooLanguage.KEY);
    defineRulesForLanguage(context, repositoryKey, repositoryName, FooLanguage.KEY);
  }

我已经尝试了包含规则的 .xml 文件的不同路径,以智取任何可能的问题。该 .xml 文件现在看起来像这样(现在也非常简单,只有一条规则可以使其更易于应用):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<rules>
  <rule>
    <key>da-rule-key</key>
    <name>Nome da regra</name>
  </rule>
</rules>

我正在使用本地 SonarQube 5.3,但我尝试了不同的版本都没有成功。提前致谢。

4

1 回答 1

0

事实证明,规则没有显示在“质量配置文件”(QP)下的原因是因为在导入后,它们仍然没有与任何 QP 相关联,这是必须完成的。所以导入过程现在可以正常工作。几点建议:

  • 包含规则的 .xml 文件的强制性标签是(不正确的文件结构可能导致 SonarQube 在启动期间失败):

    <rules>
         <rule>
            <key> </key>
            <name> </name>
            <description> </description>    
        </rule>
    </rules>
    
  • 同样在我的情况下,包含规则的 .xml 文件的路径也引起了一些问题。正确的是(通过位于src\main\resources下):

    InputStream rulesXml = this.getClass().getResourceAsStream("/rules-TESTE.xml");
    

更详细的解释可以在这里找到:https ://stackoverflow.com/a/36375145/5560215

于 2016-03-16T12:09:24.787 回答