5

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

这是我的 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文件夹
  • 规则集的参考位置来自<pmd rulesetfiles=...>
4

3 回答 3

4

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

PMD 规则集文件的文档说它是逗号分隔的文件列表。

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

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

这是网站上的一个例子

<fileset dir="${src.dir}" id="src.files">
      <include name="**/*.java"/>
 </fileset>

 <pathconvert pathsep="," property="javafiles" refid="src.files"/>
于 2013-03-11T07:58:35.107 回答
3

正如文档建议的那样,参数可能不支持通配符。

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

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

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

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

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

我可以想出两种方法:

  1. 写一个蚂蚁任务;Java有很多关于这个的问答,比如this
  2. <groovy>在任务中编写 groovy ;还有很多问答

编辑:

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

于 2013-03-11T02:57:35.837 回答
1

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

<pmd rulesetfiles="rulesets/internal/all-java.xml">
于 2013-08-03T16:40:52.087 回答