【问题标题】:How to run all rulesets from a folder using PMD Ant in Eclipse?如何在 Eclipse 中使用 PMD Ant 从文件夹运行所有规则集?
【发布时间】:2013-03-08 11:03:57
【问题描述】:

当我构建项目时,我正在尝试从AntEclipse 中运行PMD

这是我的 build.xml 文件:

<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>

<target name="check_pmd">
    <pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\basic.xml">
        <formatter type="html" toFile="pmd_report.html" toConsole="true"/>
        <fileset dir="C:\Users\Nikolay\ProjectName\src">
            <include name="**/*.java"/>
        </fileset>
    </pmd>
</target>

它适用于 basic.xml,但我想运行 java 文件夹中的所有规则集(它有大约 20 个规则集)所以我试过了:

<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*.xml">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*">

但是当我尝试运行时它们都失败了。 有没有办法在不手动指定文件列表的情况下指定文件夹,而不是单个文件?

供以后的读者在Eclipse下配置Ant PMD:

  • 从官网下载pmd-bin.zip
  • 解压pmd.jarjaxen.jarasm.jar
  • 将上面的 jars 添加到 Window - Preferences - Ant - Runtime - Ant Home Entries - Add External JARs
  • 解压rulesets文件夹
  • 来自&lt;pmd rulesetfiles=...&gt; 的规则集参考位置

【问题讨论】:

    标签: java eclipse ant pmd


    【解决方案1】:

    (来自coolfan对蚂蚁任务的扩展答案)

    PMD 规则集文件的文档说是comma separated list of files.

    rulesetfiles 以逗号分隔的规则集文件列表 ('rulesets/basic.xml,rulesets/design.xml')。如果你自己写 规则集文件,您可以将它们放在类路径中并将它们插入 这里。是的,除非使用了规则集嵌套元素

    Ant 提供了一种将文件集转换为这种格式的方法。 The task is pathconvert

    这是来自网站的示例

    <fileset dir="${src.dir}" id="src.files">
          <include name="**/*.java"/>
     </fileset>
    
     <pathconvert pathsep="," property="javafiles" refid="src.files"/>
    

    【讨论】:

    • 感谢您的回答,很抱歉本周无法使用它。你不介意我赏金给coolcfan吗?
    • @尼古拉库兹涅佐夫:没问题。如您所见,我扩展了他的答案:)
    【解决方案2】:

    也许参数不支持通配符,正如document 所暗示的那样。

    快速浏览其源代码也支持我的猜测,请参阅RuleSetReferenceId.java,第 194 行。

    因此,它需要一个包含使用, 作为分隔符的“列表”的属性,例如:

    "rule1,rule2,rule3,path-to-rule-file4"
    

    解决方法可能是扫描目录,列出所有规则 XML 文件,并以逗号分隔格式构建属性,然后将其传递给 &lt;pmd&gt; 任务。

    不幸的是,我不知道任何蚂蚁任务可以做到这一点。所以你可能需要写一些代码。

    我可以想出两种方法:

    1. 写一个蚂蚁任务;有很多关于 Java 的问答,例如 this
    2. &lt;groovy&gt; 任务中编写 groovy;还有很多Q&As

    编辑:

    Jayan 建议&lt;pathconvert&gt; 任务,这应该是正确的答案。

    【讨论】:

    • 感谢您的回答!我给你赏金并接受对Jayan的回答。我希望你没事。
    【解决方案3】:

    在 pmd 库 jar 中有一个 all-java.xml,其中包含所有规则集。 尝试使用以下内容:

    <pmd rulesetfiles="rulesets/internal/all-java.xml">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多