当我构建项目时,我试图从Ant
在Eclipse
中运行PMD
。
<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.jar
、jaxen.jar
和asm.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的这个问题有很多,像这样。
- 在
<groovy>
任务中写入groovy;也有很多问题。
编辑:
Jayan建议<pathconvert>
任务,这应该是正确的答案。
在pmd库jar中有一个all-java.xml,其中包含了所有规则集。尝试使用以下命令:
<pmd rulesetfiles="rulesets/internal/all-java.xml">