我正在努力尝试在我们的SONAR服务器上获得一些自定义的pmd规则,以便它们出现在我们的夜间测试中。我有一个xml文件,其中包含一系列自定义规则:
<rule class="net.sourceforge.pmd.rules.XPathRule" dfa="false" externalInfoUrl="" message="System.out.print is used" name="MyOrganisation_SystemPrintln" typeResolution="true">
<description>System.(out|err).print is used, consider using a logger.</description>
<priority>5</priority>
<properties>
<property name="xpath">
<value><![CDATA[
//Name[
starts-with(@Image, 'System.out.print')
or
starts-with(@Image, 'System.err.print')
]
]]></value>
</property>
</properties>
<example><![CDATA[
class Foo{
Logger log = Logger.getLogger(Foo.class.getName());
public void testA () {
System.out.println("Entering test");
// Better use this
log.fine("Entering test");
}
}
]]></example>
当我转到质量配置文件页面并创建一个新的配置文件时,给它一个xml文件我得到了一堆这样的错误:
PMD XPath规则&#39; MyOrganisation_SystemPrintln&#39;无法导入 自动。必须通过SonarQube手动创建规则 网络界面。
这看起来很清楚,但是当我尝试通过复制已经存在的通用xpath规则来创建新规则并更改它时,无处可放置&#34;示例&#34;部分。 (只有Name,message,xpathQuery和Description)我想知道我是否遗漏了可能导致此问题的原因,以及如何将这些规则放到声纳服务器上?
非常感谢。
编辑:PMD版本是1.3,java插件
也是如此Edit2:规则的另一个例子:
<rule class="net.sourceforge.pmd.rules.UnusedPrivateFieldRule" dfa="false" externalInfoUrl="" message="Avoid unused private fields such as ''{0}''" name="MyOrganisation_UnusedPrivateField" typeResolution="true">
<description>Detects when a private field is declared and/or assigned a value, but not used.</description>
<priority>5</priority>
<example><![CDATA[
public class Something {
private static int FOO = 2; // Unused
private int i = 5; // Unused
private int j = 6;
public int addOne() {
return j++;
}
}
]]></example>
</rule>
答案 0 :(得分:0)
实际上,SonarQube自定义规则中不可能像PMD自定义规则那样声明示例,您必须将示例放在说明中,例如使用blockquote
元素。