如何在Eclipse中使用PMD Ant从文件夹运行所有规则集?

时间:2013-03-08 11:03:58

标签: java eclipse ant pmd

我在构建项目时尝试从PMD Ant运行Eclipse

这是我的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
  • 将上面的jar添加到Window - Preferences - Ant - Runtime - Ant Home Entries - 添加外部JAR
  • 解压缩rulesets文件夹
  • 来自<pmd rulesetfiles=...>
  • 的规则集的参考位置

3 个答案:

答案 0 :(得分:4)

(从coolfan扩展答案为ant任务)

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

  

rulesetfiles 以逗号分隔的规则集文件列表   ( '规则集/ basic.xml,规则集/ 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"/>

答案 1 :(得分:3)

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

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

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

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

解决方法可能是扫描目录,列出所有rule-xml文件,并以逗号分隔格式构建属性,然后将其传递给<pmd>任务。

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

我可以提出两种方法:

  1. 写一个蚂蚁任务;对于Java,有许多Q&amp;关于这一点,例如this
  2. <groovy>任务中写groovy;还有很多Q&As

  3. 编辑:

    Jayan建议<pathconvert>任务,这应该是正确答案。

答案 2 :(得分:1)

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

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