我在构建项目时尝试从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.jar
,jaxen.jar
和asm.jar
rulesets
文件夹<pmd rulesetfiles=...>
答案 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>
任务。
不幸的是,我不知道任何可以做到这一点的蚂蚁任务。所以你可能要编写一些代码。
我可以提出两种方法:
答案 2 :(得分:1)
在pmd库jar中有一个all-java.xml,其中包含了所有规则集。 尝试使用以下内容:
<pmd rulesetfiles="rulesets/internal/all-java.xml">