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



当我构建项目时,我试图从AntEclipse中运行PMD

这是我的build.xml文件:
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>
<target name="check_pmd">
    <pmd rulesetfiles="C:UsersNikolayProjectNamelibrulesetsjavabasic.xml">
        <formatter type="html" toFile="pmd_report.html" toConsole="true"/>
        <fileset dir="C:UsersNikolayProjectNamesrc">
            <include name="**/*.java"/>
        </fileset>
    </pmd>
</target>

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

<pmd rulesetfiles="C:UsersNikolayProjectNamelibrulesetsjava*.xml">
<pmd rulesetfiles="C:UsersNikolayProjectNamelibrulesetsjava*">

但是当我试图运行时,它们都失败了。是否有一种方法可以指定文件夹,而不是单个文件,而无需手动指定文件列表?

供将来的读者在Eclipse下配置Ant PMD:

  • 从官网下载pmd-bin.zip
  • 解包pmd.jarjaxen.jarasm.jar
  • 将上述jar添加到Window - Preferences - Ant - Runtime - Ant Home Entries - Add External jar
  • 解压rulesets文件夹
  • <pmd rulesetfiles=...>中规则集的参考位置

(将coolfan的答案扩展到ant任务)

PMD rulesetfiles的文档说它是一个逗号分隔的文件列表。

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

Ant提供了一种将文件集转换为这种格式的方法。任务是pathconvert

这是一个来自网站

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

可能参数不支持通配符,如文档所示。

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

因此,它接受一个包含"list"的属性,使用,作为分隔符,如:

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

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

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

我可以想出两种方法:

    写蚂蚁任务;关于Java的这个问题有很多,像这样。
  1. <groovy>任务中写入groovy;也有很多问题。

编辑:

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

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

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

相关内容

  • 没有找到相关文章

最新更新