上周客户要求对OA系统的代码质量进行了一个总体审查,而且要出一份报告给领导。html
为此花了半天时间把代码审查工具PMD琢磨了下,现将具体操做步骤描述以下,以供你们参考!ide
质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤为是企业应用软件系统来讲,除了软件运行质量、文档质量之外,代码的质量也是很是重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。工具
PMD是一种分析Java代码错误的开源工具。与其余分析工具不一样的是,PMD经过静态分析获知代码错误。也就是说,在不运行Java程序的状况下报告错误。PMD附带了许多能够直接使用的规则,利用这些规则能够找出Java源程序的许多问题,例如:oop
此外,用户还能够本身定义规则,检查Java代码是否符合某些特定的编码规范。例如,你能够编写一个规则,要求PMD找出全部建立Thread和Socket对象的操做。优化
一、首先须要下载ant-1.8.2及pmd-bin-4.2.1两个资源;ui
二、ant环境变量配置:this
目录:[../pmd-bin-4.2.1/pmd-4.2.1]编码
其中运行完生成的(E:\Tool\PMD\imis_oa.html)文件即是审查结果报告!spa
目录:[../pmd-bin-4.2.1/pmd-4.2.1/rulesets].net
1 <?xml version="1.0"?> 2 3 <ruleset name="Favorites" 4 xmlns="http://pmd.sf.net/ruleset/1.0.0" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" 7 xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> 8 9 <description> 10 The Favorites ruleset contains links to rules that I like to use. Usually I 11 combine this ruleset with the unusedcode.xml, basic.xml, and import.xml rulesets for my projects. 12 This ruleset also serves as an example of how to do a custom ruleset. 13 </description> 14 <rule ref="rulesets/basic.xml"/> 15 <rule ref="rulesets/unusedcode.xml"/> 16 <rule ref="rulesets/braces.xml/IfStmtsMustUseBraces"/> 17 <rule ref="rulesets/braces.xml/WhileLoopsMustUseBraces"/> 18 <rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/> 19 <rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/> 20 <rule ref="rulesets/design.xml/CloseResource"/> 21 <rule ref="rulesets/design.xml/NonStaticInitializer"/> 22 <rule ref="rulesets/design.xml/NonCaseLabelInSwitchStatement"/> 23 <rule ref="rulesets/design.xml/OptimizableToArrayCall"/> 24 <rule ref="rulesets/design.xml/EqualsNull"/> 25 <rule ref="rulesets/design.xml/AbstractClassWithoutAbstractMethod"/> 26 <rule ref="rulesets/design.xml/UnnecessaryLocalBeforeReturn"/> 27 <rule ref="rulesets/design.xml/UncommentedEmptyMethod"/> 28 <rule ref="rulesets/design.xml/UseCollectionIsEmpty"/> 29 <rule ref="rulesets/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/> 30 <rule ref="rulesets/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/> 31 <rule ref="rulesets/design.xml/ReturnEmptyArrayRatherThanNull"/> 32 <rule ref="rulesets/design.xml/AbstractClassWithoutAnyMethod"/> 33 <rule ref="rulesets/basic.xml/EmptyCatchBlock"/> 34 <rule ref="rulesets/basic.xml/EmptyIfStmt"/> 35 <rule ref="rulesets/basic.xml/EmptyWhileStmt"/> 36 <rule ref="rulesets/basic.xml/EmptyTryBlock"/> 37 <rule ref="rulesets/basic.xml/EmptyFinallyBlock"/> 38 <rule ref="rulesets/basic.xml/EmptySwitchStatements"/> 39 <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"/> 40 <rule ref="rulesets/basic.xml/BooleanInstantiation"/> 41 <rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/> 42 <rule ref="rulesets/strings.xml/StringToString"/> 43 <rule ref="rulesets/strings.xml/StringInstantiation"/> 44 <rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/> 45 <rule ref="rulesets/controversial.xml/NullAssignment"/> 46 <rule ref="rulesets/controversial.xml/UnusedModifier"/> 47 48 49 </ruleset>
经本人屡次尝试不替换会报如下错误:
若以上步骤都成功完成,你想要的代码审查报告也已生成!呈现形式以下: