`

Jenkins+PMD构建自动化静态代码检测

阅读更多

原文:http://www.open-open.com/lib/view/open1425647692009.html (Jenkins+PMD构建自动化静态代码检测)

 

 

前言:软件缺陷是不可避免的,要尽量减少错误并提高软件质量,主要有两在类技术,即缺陷预防和缺陷检测

缺陷预防包括编写更好的设计规范、实施代码审核制度、运行代码静态分析工具、运行单元测试等

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>  

本文中定义了两个target,分别生成了XML和HTML格式的报告,因为在Jenkins中的分析插件需要用XML格式才能生成视图报告,而XML格式对于团队来说不直观,不宜发送邮件,因此生成两份报告,一份用于Jenkins分析,一份发送邮件用于团队成员直接查看

编写好buildPMD.xml,直接使用ant -f buildPMD.xml即可在CMD命令或Linux shell下执行PMD静态代码检测

在Jenkins中新建个任务,Build项Add build step中选择“Execute Shell”,输入ant -f buildPMD.xml即可

附:pmdrule.xml


[xml] view plaincopy

    <?xml version="1.0" encoding="UTF-8"?>  
    <ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="pmdrule" xsi:schemalocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">  
       <description>PMD Plugin preferences rule set</description>  
       <rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod">  
       <rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod">  
       <rule ref="rulesets/java/naming.xml/AbstractNaming">  
       <rule ref="rulesets/java/design.xml/AccessorClassGeneration">  
       <rule ref="rulesets/java/optimizations.xml/AddEmptyString">  
       <rule ref="rulesets/java/strings.xml/AppendCharacterWithChar">  
       <rule ref="rulesets/java/sunsecure.xml/ArrayIsStoredDirectly">  
       <rule ref="rulesets/ecmascript/basic.xml/AssignmentInOperand">  
       <rule ref="rulesets/java/controversial.xml/AssignmentInOperand">  
       <rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic">  
       <rule ref="rulesets/java/controversial.xml/AtLeastOneConstructor">  
       <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration">  
       <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops">  
       <rule ref="rulesets/java/migrating.xml/AvoidAssertAsIdentifier">  
       <rule ref="rulesets/xsl/xpath.xml/AvoidAxisNavigation">  
       <rule ref="rulesets/java/basic.xml/AvoidBranchingStatementAsLastInLoop">  
       <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize">  
       <rule ref="rulesets/java/strictexception.xml/AvoidCatchingGenericException">  
       <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE">  
       <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable">  
       <rule ref="rulesets/java/design.xml/AvoidConstantsInterface">  
       <rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor">  
       <rule ref="rulesets/java/design.xml/AvoidDeeplyNestedIfStmts">  
       <rule ref="rulesets/java/naming.xml/AvoidDollarSigns">  
       <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals">  
       <rule ref="rulesets/java/migrating.xml/AvoidEnumAsIdentifier">  
       <rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingMethodName">  
       <rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingTypeName">  
       <rule ref="rulesets/java/controversial.xml/AvoidFinalLocalVariable">  
       <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause">  
       <rule ref="rulesets/java/optimizations.xml/AvoidInstantiatingObjectsInLoops">  
       <rule ref="rulesets/java/controversial.xml/AvoidLiteralsInIfCondition">  
       <rule ref="rulesets/java/strictexception.xml/AvoidLosingExceptionInformation">  
       <rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators">  
       <rule ref="rulesets/java/controversial.xml/AvoidPrefixingMethodParameters">  
       <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace">  
       <rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass">  
       <rule ref="rulesets/java/design.xml/AvoidReassigningParameters">  
       <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException">  
       <rule ref="rulesets/java/strings.xml/AvoidStringBufferField">  
       <rule ref="rulesets/java/design.xml/AvoidSynchronizedAtMethodLevel">  
       <rule ref="rulesets/java/basic.xml/AvoidThreadGroup">  
       <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException">  
       <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException">  
       <rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes">  
       <rule ref="rulesets/ecmascript/basic.xml/AvoidTrailingComma">  
       <rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP">  
       <rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode">  
       <rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues">  
       <rule ref="rulesets/java/controversial.xml/AvoidUsingShortType">  
       <rule ref="rulesets/java/controversial.xml/AvoidUsingVolatile">  
       <rule ref="rulesets/java/design.xml/BadComparison">  
       <rule ref="rulesets/java/javabeans.xml/BeanMembersShouldSerialize">  
       <rule ref="rulesets/java/basic.xml/BigIntegerInstantiation">  
       <rule ref="rulesets/java/naming.xml/BooleanGetMethodName">  
       <rule ref="rulesets/java/basic.xml/BooleanInstantiation">  
       <rule ref="rulesets/java/controversial.xml/BooleanInversion">  
       <rule ref="rulesets/java/basic.xml/BrokenNullCheck">  
       <rule ref="rulesets/java/migrating.xml/ByteInstantiation">  
       <rule ref="rulesets/java/android.xml/CallSuperFirst">  
       <rule ref="rulesets/java/controversial.xml/CallSuperInConstructor">  
       <rule ref="rulesets/java/android.xml/CallSuperLast">  
       <rule ref="rulesets/java/basic.xml/CheckResultSet">  
       <rule ref="rulesets/java/basic.xml/CheckSkipResult">  
       <rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray">  
       <rule ref="rulesets/java/naming.xml/ClassNamingConventions">  
       <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal">  
       <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable">  
       <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException">  
       <rule ref="rulesets/java/design.xml/CloseResource">  
       <rule ref="rulesets/java/basic.xml/CollapsibleIfStatements">  
       <rule ref="rulesets/java/comments.xml/CommentContent">  
       <rule ref="rulesets/java/comments.xml/CommentRequired">  
       <rule ref="rulesets/java/comments.xml/CommentSize">  
       <rule ref="rulesets/java/design.xml/CompareObjectsWithEquals">  
       <rule ref="rulesets/java/design.xml/ConfusingTernary">  
       <rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends">  
       <rule ref="rulesets/ecmascript/basic.xml/ConsistentReturn">  
       <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod">  
       <rule ref="rulesets/java/coupling.xml/CouplingBetweenObjects">  
       <rule ref="rulesets/java/codesize.xml/CyclomaticComplexity">  
       <rule ref="rulesets/java/controversial.xml/DataflowAnomalyAnalysis">  
       <rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt">  
       <rule ref="rulesets/java/controversial.xml/DefaultPackage">  
       <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly">  
       <rule ref="rulesets/java/j2ee.xml/DoNotCallSystemExit">  
       <rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError">  
       <rule ref="rulesets/java/android.xml/DoNotHardCodeSDCard">  
       <rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally">  
       <rule ref="rulesets/java/j2ee.xml/DoNotUseThreads">  
       <rule ref="rulesets/java/basic.xml/DontCallThreadRun">  
       <rule ref="rulesets/java/imports.xml/DontImportJavaLang">  
       <rule ref="rulesets/java/controversial.xml/DontImportSun">  
       <rule ref="rulesets/jsp/basic-jsf.xml/DontNestJsfInJstlIteration">  
       <rule ref="rulesets/java/basic.xml/DontUseFloatTypeForLoopIndices">  
       <rule ref="rulesets/java/basic.xml/DoubleCheckedLocking">  
       <rule ref="rulesets/java/imports.xml/DuplicateImports">  
       <rule ref="rulesets/jsp/basic.xml/DuplicateJspImports">  
       <rule ref="rulesets/java/basic.xml/EmptyCatchBlock">  
       <rule ref="rulesets/java/empty.xml/EmptyCatchBlock">  
       <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer">  
       <rule ref="rulesets/java/basic.xml/EmptyFinallyBlock">  
       <rule ref="rulesets/java/empty.xml/EmptyFinallyBlock">  
       <rule ref="rulesets/java/basic.xml/EmptyIfStmt">  
       <rule ref="rulesets/java/empty.xml/EmptyIfStmt">  
       <rule ref="rulesets/java/basic.xml/EmptyInitializer">  
       <rule ref="rulesets/java/empty.xml/EmptyInitializer">  
       <rule ref="rulesets/java/design.xml/EmptyMethodInAbstractClassShouldBeAbstract">  
       <rule ref="rulesets/java/basic.xml/EmptyStatementBlock">  
       <rule ref="rulesets/java/empty.xml/EmptyStatementBlock">  
       <rule ref="rulesets/java/basic.xml/EmptyStatementNotInLoop">  
       <rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop">  
       <rule ref="rulesets/java/basic.xml/EmptyStaticInitializer">  
       <rule ref="rulesets/java/empty.xml/EmptyStaticInitializer">  
       <rule ref="rulesets/java/basic.xml/EmptySwitchStatements">  
       <rule ref="rulesets/java/empty.xml/EmptySwitchStatements">  
       <rule ref="rulesets/java/basic.xml/EmptySynchronizedBlock">  
       <rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock">  
       <rule ref="rulesets/java/basic.xml/EmptyTryBlock">  
       <rule ref="rulesets/java/empty.xml/EmptyTryBlock">  
       <rule ref="rulesets/java/basic.xml/EmptyWhileStmt">  
       <rule ref="rulesets/java/empty.xml/EmptyWhileStmt">  
       <rule ref="rulesets/ecmascript/basic.xml/EqualComparison">  
       <rule ref="rulesets/java/design.xml/EqualsNull">  
       <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl">  
       <rule ref="rulesets/java/codesize.xml/ExcessiveClassLength">  
       <rule ref="rulesets/java/coupling.xml/ExcessiveImports">  
       <rule ref="rulesets/java/codesize.xml/ExcessiveMethodLength">  
       <rule ref="rulesets/java/codesize.xml/ExcessiveParameterList">  
       <rule ref="rulesets/java/codesize.xml/ExcessivePublicCount">  
       <rule ref="rulesets/java/basic.xml/ExtendsObject">  
       <rule ref="rulesets/java/design.xml/FieldDeclarationsShouldBeAtStartOfClass">  
       <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic">  
       <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize">  
       <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize">  
       <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded">  
       <rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected">  
       <rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop">  
       <rule ref="rulesets/ecmascript/braces.xml/ForLoopsMustUseBraces">  
       <rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces">  
       <rule ref="rulesets/java/naming.xml/GenericsNaming">  
       <rule ref="rulesets/ecmascript/basic.xml/GlobalVariable">  
       <rule ref="rulesets/java/design.xml/GodClass">  
       <rule ref="rulesets/java/logging-jakarta-commons.xml/GuardDebugLogging">  
       <rule ref="rulesets/java/design.xml/IdempotentOperations">  
       <rule ref="rulesets/ecmascript/braces.xml/IfElseStmtsMustUseBraces">  
       <rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces">  
       <rule ref="rulesets/ecmascript/braces.xml/IfStmtsMustUseBraces">  
       <rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces">  
       <rule ref="rulesets/jsp/basic.xml/IframeMissingSrcAttribute">  
       <rule ref="rulesets/java/design.xml/ImmutableField">  
       <rule ref="rulesets/java/imports.xml/ImportFromSamePackage">  
       <rule ref="rulesets/java/strings.xml/InefficientEmptyStringCheck">  
       <rule ref="rulesets/java/strings.xml/InefficientStringBuffering">  
       <rule ref="rulesets/ecmascript/basic.xml/InnaccurateNumericLiteral">  
       <rule ref="rulesets/java/design.xml/InstantiationToGetClass">  
       <rule ref="rulesets/java/strings.xml/InsufficientStringBufferDeclaration">  
       <rule ref="rulesets/java/migrating.xml/IntegerInstantiation">  
       <rule ref="rulesets/java/migrating.xml/JUnit4SuitesShouldUseSuiteAnnotation">  
       <rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseAfterAnnotation">  
       <rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseBeforeAnnotation">  
       <rule ref="rulesets/java/migrating.xml/JUnit4TestShouldUseTestAnnotation">  
       <rule ref="rulesets/java/junit.xml/JUnitAssertionsShouldIncludeMessage">  
       <rule ref="rulesets/java/junit.xml/JUnitSpelling">  
       <rule ref="rulesets/java/junit.xml/JUnitStaticSuite">  
       <rule ref="rulesets/java/junit.xml/JUnitTestContainsTooManyAsserts">  
       <rule ref="rulesets/java/junit.xml/JUnitTestsShouldIncludeAssert">  
       <rule ref="rulesets/java/migrating.xml/JUnitUseExpected">  
       <rule ref="rulesets/jsp/basic.xml/JspEncoding">  
       <rule ref="rulesets/java/basic.xml/JumbledIncrementer">  
       <rule ref="rulesets/java/coupling.xml/LawOfDemeter">  
       <rule ref="rulesets/java/j2ee.xml/LocalHomeNamingConvention">  
       <rule ref="rulesets/java/j2ee.xml/LocalInterfaceSessionNamingConvention">  
       <rule ref="rulesets/java/optimizations.xml/LocalVariableCouldBeFinal">  
       <rule ref="rulesets/java/logging-java.xml/LoggerIsNotStaticFinal">  
       <rule ref="rulesets/java/design.xml/LogicInversion">  
       <rule ref="rulesets/java/migrating.xml/LongInstantiation">  
       <rule ref="rulesets/java/naming.xml/LongVariable">  
       <rule ref="rulesets/java/coupling.xml/LooseCoupling">  
       <rule ref="rulesets/java/coupling.xml/LoosePackageCoupling">  
       <rule ref="rulesets/java/j2ee.xml/MDBAndSessionBeanNamingConvention">  
       <rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal">  
       <rule ref="rulesets/java/naming.xml/MethodNamingConventions">  
       <rule ref="rulesets/java/sunsecure.xml/MethodReturnsInternalArray">  
       <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass">  
       <rule ref="rulesets/java/naming.xml/MisleadingVariableName">  
       <rule ref="rulesets/java/basic.xml/MisplacedNullCheck">  
       <rule ref="rulesets/java/design.xml/MissingBreakInSwitch">  
       <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID">  
       <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass">  
       <rule ref="rulesets/xml/basic.xml/MistypedCDATASection">  
       <rule ref="rulesets/java/logging-java.xml/MoreThanOneLogger">  
       <rule ref="rulesets/java/codesize.xml/NPathComplexity">  
       <rule ref="rulesets/java/codesize.xml/NcssConstructorCount">  
       <rule ref="rulesets/java/codesize.xml/NcssMethodCount">  
       <rule ref="rulesets/java/codesize.xml/NcssTypeCount">  
       <rule ref="rulesets/jsp/basic.xml/NoClassAttribute">  
       <rule ref="rulesets/jsp/basic.xml/NoHtmlComments">  
       <rule ref="rulesets/jsp/basic.xml/NoInlineScript">  
       <rule ref="rulesets/jsp/basic.xml/NoInlineStyleInformation">  
       <rule ref="rulesets/jsp/basic.xml/NoJspForward">  
       <rule ref="rulesets/jsp/basic.xml/NoLongScripts">  
       <rule ref="rulesets/java/naming.xml/NoPackage">  
       <rule ref="rulesets/jsp/basic.xml/NoScriptlets">  
       <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement">  
       <rule ref="rulesets/java/design.xml/NonStaticInitializer">  
       <rule ref="rulesets/java/design.xml/NonThreadSafeSingleton">  
       <rule ref="rulesets/java/controversial.xml/NullAssignment">  
       <rule ref="rulesets/java/controversial.xml/OneDeclarationPerLine">  
       <rule ref="rulesets/java/controversial.xml/OnlyOneReturn">  
       <rule ref="rulesets/java/design.xml/OptimizableToArrayCall">  
       <rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode">  
       <rule ref="rulesets/java/naming.xml/PackageCase">  
       <rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons">  
       <rule ref="rulesets/java/optimizations.xml/PrematureDeclaration">  
       <rule ref="rulesets/java/design.xml/PreserveStackTrace">  
       <rule ref="rulesets/java/clone.xml/ProperCloneImplementation">  
       <rule ref="rulesets/java/logging-jakarta-commons.xml/ProperLogger">  
       <rule ref="rulesets/java/optimizations.xml/RedundantFieldInitializer">  
       <rule ref="rulesets/java/j2ee.xml/RemoteInterfaceNamingConvention">  
       <rule ref="rulesets/java/j2ee.xml/RemoteSessionInterfaceNamingConvention">  
       <rule ref="rulesets/java/migrating.xml/ReplaceEnumerationWithIterator">  
       <rule ref="rulesets/java/migrating.xml/ReplaceHashtableWithMap">  
       <rule ref="rulesets/java/migrating.xml/ReplaceVectorWithList">  
       <rule ref="rulesets/java/design.xml/ReturnEmptyArrayRatherThanNull">  
       <rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock">  
       <rule ref="rulesets/ecmascript/basic.xml/ScopeForInVariable">  
       <rule ref="rulesets/java/naming.xml/ShortClassName">  
       <rule ref="rulesets/java/migrating.xml/ShortInstantiation">  
       <rule ref="rulesets/java/naming.xml/ShortMethodName">  
       <rule ref="rulesets/java/naming.xml/ShortVariable">  
       <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException">  
       <rule ref="rulesets/java/design.xml/SimpleDateFormatNeedsLocale">  
       <rule ref="rulesets/java/junit.xml/SimplifyBooleanAssertion">  
       <rule ref="rulesets/java/design.xml/SimplifyBooleanExpressions">  
       <rule ref="rulesets/java/design.xml/SimplifyBooleanReturns">  
       <rule ref="rulesets/java/design.xml/SimplifyConditional">  
       <rule ref="rulesets/java/optimizations.xml/SimplifyStartsWith">  
       <rule ref="rulesets/java/design.xml/SingularField">  
       <rule ref="rulesets/java/j2ee.xml/StaticEJBFieldShouldBeFinal">  
       <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar">  
       <rule ref="rulesets/java/strings.xml/StringInstantiation">  
       <rule ref="rulesets/java/strings.xml/StringToString">  
       <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName">  
       <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName">  
       <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName">  
       <rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape">  
       <rule ref="rulesets/java/design.xml/SwitchDensity">  
       <rule ref="rulesets/java/design.xml/SwitchStmtsShouldHaveDefault">  
       <rule ref="rulesets/java/logging-java.xml/SystemPrintln">  
       <rule ref="rulesets/java/junit.xml/TestClassWithoutTestCases">  
       <rule ref="rulesets/java/design.xml/TooFewBranchesForASwitchStatement">  
       <rule ref="rulesets/java/codesize.xml/TooManyFields">  
       <rule ref="rulesets/java/codesize.xml/TooManyMethods">  
       <rule ref="rulesets/java/imports.xml/TooManyStaticImports">  
       <rule ref="rulesets/java/design.xml/UncommentedEmptyConstructor">  
       <rule ref="rulesets/java/design.xml/UncommentedEmptyMethod">  
       <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement">  
       <rule ref="rulesets/ecmascript/unnecessary.xml/UnnecessaryBlock">  
       <rule ref="rulesets/java/junit.xml/UnnecessaryBooleanAssertion">  
       <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange">  
       <rule ref="rulesets/java/controversial.xml/UnnecessaryConstructor">  
       <rule ref="rulesets/java/unnecessary.xml/UnnecessaryConversionTemporary">  
       <rule ref="rulesets/java/basic.xml/UnnecessaryConversionTemporary">  
       <rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier">  
       <rule ref="rulesets/java/basic.xml/UnnecessaryFinalModifier">  
       <rule ref="rulesets/java/imports.xml/UnnecessaryFullyQualifiedName">  
       <rule ref="rulesets/java/design.xml/UnnecessaryLocalBeforeReturn">  
       <rule ref="rulesets/ecmascript/unnecessary.xml/UnnecessaryParentheses">  
       <rule ref="rulesets/java/controversial.xml/UnnecessaryParentheses">  
       <rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn">  
       <rule ref="rulesets/java/basic.xml/UnnecessaryReturn">  
       <rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation">  
       <rule ref="rulesets/ecmascript/basic.xml/UnreachableCode">  
       <rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter">  
       <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter">  
       <rule ref="rulesets/java/imports.xml/UnusedImports">  
       <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable">  
       <rule ref="rulesets/java/unusedcode.xml/UnusedModifier">  
       <rule ref="rulesets/java/unnecessary.xml/UnusedNullCheckInEquals">  
       <rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals">  
       <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField">  
       <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod">  
       <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector">  
       <rule ref="rulesets/java/optimizations.xml/UseArraysAsList">  
       <rule ref="rulesets/java/junit.xml/UseAssertEqualsInsteadOfAssertTrue">  
       <rule ref="rulesets/java/junit.xml/UseAssertNullInsteadOfAssertTrue">  
       <rule ref="rulesets/java/junit.xml/UseAssertSameInsteadOfAssertTrue">  
       <rule ref="rulesets/java/junit.xml/UseAssertTrueInsteadOfAssertEquals">  
       <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty">  
       <rule ref="rulesets/xsl/xpath.xml/UseConcatOnce">  
       <rule ref="rulesets/java/controversial.xml/UseConcurrentHashMap">  
       <rule ref="rulesets/java/logging-jakarta-commons.xml/UseCorrectExceptionLogging">  
       <rule ref="rulesets/java/strings.xml/UseEqualsToCompareStrings">  
       <rule ref="rulesets/java/strings.xml/UseIndexOfChar">  
       <rule ref="rulesets/java/design.xml/UseLocaleWithCaseConversions">  
       <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify">  
       <rule ref="rulesets/java/controversial.xml/UseObjectForClearerAPI">  
       <rule ref="rulesets/java/j2ee.xml/UseProperClassLoader">  
       <rule ref="rulesets/java/design.xml/UseSingleton">  
       <rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends">  
       <rule ref="rulesets/java/strings.xml/UseStringBufferLength">  
       <rule ref="rulesets/java/design.xml/UseVarargs">  
       <rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable">  
       <rule ref="rulesets/java/basic.xml/UselessOperationOnImmutable">  
       <rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod">  
       <rule ref="rulesets/java/basic.xml/UselessOverridingMethod">  
       <rule ref="rulesets/java/unnecessary.xml/UselessParentheses">  
       <rule ref="rulesets/java/basic.xml/UselessParentheses">  
       <rule ref="rulesets/java/strings.xml/UselessStringValueOf">  
       <rule ref="rulesets/java/naming.xml/VariableNamingConventions">  
       <rule ref="rulesets/ecmascript/braces.xml/WhileLoopsMustUseBraces">  
       <rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces">  

 

关于PMD rulesets规则的意思可以查看:http://pmd.sourceforge.net/pmd-5.0.4/rules/index.html

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics