# PHPMD配合ant用法
我们提供了一个集成PHPMD到[ant构建工具](http://ant.apache.org/)的[ant任务](http://ant.apache.org/manual/targets.html),来使构建过程变得更轻松。ant任务jar文件可以从PHPMD主页[下载].(https://phpmd.org/download/extensions#ant-task)
您有两种方式使用。一种是copy或者关联jar文件到ant安装目录的lib文件夹。
```bash
mapi@arwen ~ $ wget \
http://phpmd.org/download/extensions/ant-phpmd-0.1.0.jar
...
mapi@arwen ~ $ ln -s ~/ant-phpmd-0.1.0.jar /opt/ant/lib/ant-phpmd.jar
```
第二种是使用``-lib``开关调用ant
```mapi@arwen ~ $ ant -lib ant-phpmd-0.1.0.jar```
现在可以在build.xml中使用PHPMD了。我们增加一个任务定义通知ant有新任务,并使用自定义的标识符来注册它。
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<project name="phpmd.example" default="example" basedir=".">
<taskdef name="phpmd" classname="org.phpmd.ant.PHPMDTask"/>
</project>
```
现在我们可以用PHPMD任务的xml元素``<phpmd />``调用PHPMD任务:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="phpmd.example" default="example" basedir=".">
<taskdef name="phpmd" classname="org.phpmd.ant.PHPMDTask"/>
<target name="example">
<phpmd rulesetfiles="unusedcode" failonerror="off">
<formatter type="xml" toFile="${basedir}/pmd.xml" />
<fileset dir="${basedir}/PHPMD">
<include name="*.php" />
</fileset>
</phpmd>
</target>
</project>
```
## 参数
PHPMD任务的xml元素可以使用的属性
属性 | 描述 | 必选
---|---|----
rulesetfiles | 逗号隔开的规则集 ('rulesets/basic.xml,rulesets/design.xml') 或者内建规则集标识符 | 必须,或者使用规则集内嵌元素
failonerror | 在处理文件时出现错误是否导致失败 | No
failOnRuleViolation | PHPMD发现问题时是否导致失败 | No
minimumPriority | 规则阈值;低权重规则将不被使用 | No
## 内嵌xml元素
``<formatter />``指定输出文件的格式
**参数**
属性 | 描述 | 必选
---|---|----
type | 报告输出格式.可以是xml,html,text | Yes
toFile | 报告写入文件名 | Yes
``<ruleset />``元素 也可以指定规则集。这是上一个示例的修改版:
```xml
<target name="example">
<phpmd failonerror="off">
<formatter type="text" toFile="${basedir}/pmd.xml" />
<ruleset>unusedcode</ruleset>
<ruleset>codesize</ruleset
<fileset dir="${basedir}/PHPMD">
<include name="*.php" />
</fileset>
</phpmd>
</target>
```
## XSLT对报告文件后期处理
有几个XSLT脚本可以把XML报告转换成漂亮的html页面。确保在PHPMD任务调用里使用XML格式化工具,例如:
```<formatter type="xml" toFile="${builddir}/~report.xml"/>```
然后在PHPMD任务的后面使用:
```xml
<xslt in="${builddir}/~report.xml"
style="${basedir}/report.xslt"
out="${reportdir}/report.html" />
```