您的位置:首页 > 产品设计 > 产品经理

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

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

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

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 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: