SonarQube 不在质量配置文件中显示导入的规则
SonarQube does not show imported rules in quality profile
我正在尝试将规则(针对 Java 和其他语言)从 .xml 文件导入到 SonarQube。我使用了一个示例插件来这样做。该示例是从 https://github.com/SonarSource/sonar-examples - 项目 sonar-reference-plugin 下载的。
质量配置文件确实已创建,但未显示任何规则。
(screen image SonarQube profile page)
这是 Override 方法,据推测它会加载规则,方法是使用 RulesDefinitionXmlLoader class:
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,但我尝试了不同的版本但没有成功。
提前致谢。
原来规则没有显示在 "Quality Profiles" (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");
更详细的解释可以在这里找到:
我正在尝试将规则(针对 Java 和其他语言)从 .xml 文件导入到 SonarQube。我使用了一个示例插件来这样做。该示例是从 https://github.com/SonarSource/sonar-examples - 项目 sonar-reference-plugin 下载的。 质量配置文件确实已创建,但未显示任何规则。 (screen image SonarQube profile page)
这是 Override 方法,据推测它会加载规则,方法是使用 RulesDefinitionXmlLoader class:
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,但我尝试了不同的版本但没有成功。 提前致谢。
原来规则没有显示在 "Quality Profiles" (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");
更详细的解释可以在这里找到: