【发布时间】:2014-08-23 01:46:11
【问题描述】:
我正在努力尝试将一些自定义 pmd 规则添加到我们的 SONAR 服务器上,以便它们出现在我们的夜间测试中。我有一个带有一堆自定义规则的 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 规则“MyOrganisation_SystemPrintln” 自动地。规则必须通过 SonarQube 手动创建 网页界面。
这似乎很清楚,但是当我尝试通过复制已经存在的通用 xpath 规则并更改它来创建新规则时,没有地方可以放置“示例”部分。 (只有名称、消息、xpathQuery 和描述)我想知道我是否遗漏了可能导致此问题的某些内容,以及如何将这些规则放到声纳服务器上?
非常感谢。
编辑: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>
【问题讨论】:
标签: xpath continuous-integration sonarqube pmd