前言:软件缺陷是不可避免的,要尽量减少错误并提高软件质量,主要有两在类技术,即缺陷预防和缺陷检测
缺陷预防包括编写更好的设计规范、实施代码审核制度、运行代码静态分析工具、运行单元测试等
PMD是一种开源分析Java代码的工具,通过静态分析获知代码错误,该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等等
因此Jenkins+PMD构建自动化静态代码检测是很有必要的
PMD下载地址http://sourceforge.net/projects/pmd/
下载后解压即可
PMD主要可以通过ant脚本来执行,编写ant的build文件,这里新建的为如buildPMD.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="pmd" default="pmd" basedir="."> <property environment="env"> <property name="ExampleProject.location" value="../ExampleProject"> <!-- 定义pmd的classpath,均为下载的pmd包解压后lib目录下的jar包--> <path id="pmd.classpath"> <pathelement location="${basedir}/lib/asm-3.2.jar"> <pathelement location="${basedir}/lib/jaxen-1.1.1.jar"> <pathelement location="${basedir}/lib/junit-4.4.jar"> <pathelement location="${basedir}/lib/pmd-5.0.4.jar"> <!-- <fileset dir="${basedir}/lib/"> <include name="**/*.jar"> --> </include></pathelement></pathelement></pathelement></pathelement></path> <target depends="pmd_html" name="pmd"> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath"> <!-- 定义代码检测规则,这里直接列出规则imports.xml和java-unusedcode规则,本例注释了,使用下面一种在另一文件中定义规则集--> <!-- <pmd rulesetfiles="rulesets/java/imports.xml,java-unusedcode"> --> <!-- 定义PMD检测规则所在的文件,规则集在pmdrule.xml文件中定义--> <pmd rulesetfiles="${basedir}/pmdrule.xml" encoding="UTF-8"> <!-- 输出XML格式的报告--> <formatter type="html" tofile="pmd_report.html" toconsole="true"> <!-- 静态代码检测ExampleProject工程下src目录下的所有java文件--> <fileset dir="${ExampleProject.location}/src"> <include name="**/*.java"> </include></fileset> </formatter></pmd> </taskdef></target> <target name="pmd_html"> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd.classpath"> <!-- <pmd rulesetfiles="rulesets/java/imports.xml,java-unusedcode"> --> <pmd rulesetfiles="${basedir}/pmdrule.xml" encoding="UTF-8"> <!-- 输出HTML格式的报告--> <formatter type="xml" tofile="pmd_report.html" toconsole="true"> <fileset dir="${ExampleProject.location}/src"> <include name="**/*.java"> </include></fileset> </formatter></pmd> </taskdef></target> </project> |