【问题标题】:SONAR 3.7.3 - PMD XPath rule <my custom rule> can't be imported automatically. The rule must be created manually through the SonarQube web interfaceSONAR 3.7.3 - PMD XPath 规则 <我的自定义规则> 无法自动导入。规则必须通过 SonarQube Web 界面手动创建
【发布时间】: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


    【解决方案1】:

    确实,SonarQube 自定义规则中不可能像 PMD 自定义规则那样声明示例,您必须将示例放在描述中,例如使用 blockquote 元素。

    【讨论】:

    • 您好 Mithfindel,感谢您的回答。我的工作假设是 xml 文件中的示例是规则运行所必需的,您是说它们只是人类可读的示例而不是代码的功能部分?
    • 也只是作为一个后续问题,如果它们没有真正的功能,你知道为什么这些例子不在 xml 文件的描述标签中吗?我知道有两种声明规则的方式,我想知道这些规则是否与声明它们的 java 方式有关,而不是 xpath 方式。谢谢。
    • 最有可能的是,PMD 这样做是为了 1. 描述不会被示例污染 2. IDE 等工具以有意义的方式显示示例(与规则的描述)。不管怎样,这确实是人类可读的代码sn-p。
    • 哦,好吧,现在说得通了。太棒了,非常感谢您的帮助! :)
    • 嗨@Mithfindel,很抱歉再次提出这个问题,我只是在查看 xml 文件,我发现有些规则不是 xpath 格式,例如我上面的那个编辑。当我尝试上传此规则时,我收到错误 无法导入没有 'ref' 属性的 PMD 规则。this 问题。我只是想知道你是否知道为什么会这样?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2017-01-07
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多