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

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

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

Jenkins+PMD构建自动化静态代码检测的更多相关文章

  1. JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测,这里记录下过程. 前提条件 安装了Jenkins 步骤 ...

  2. 搭建基于SornaQube的自动化安全代码检测平台

    一.背景和目的 近年来,随着新业务.新技术的快速发展,应用软件安全缺陷层出不穷.虽然一般情况下,开发者基本都会有单元测试.每日构建.功能测试等环节来保证应用的可用性.但在安全缺陷方面,缺乏安全意识.技 ...

  3. Nodejs + Jshint自动化静态代码检查

    1.   目的 提交代码前能够自动化静态代码检查,提高代码质量 2.   准备 1.    Nodejs安装: 官方地址:http://nodejs.org/ 安装说明:根据电脑配置下载对应的版本进行 ...

  4. Flask像Jenkins一样构建自动化测试任务

    flask这个框架很轻量,做一些小工具还是可以很快上手的. 1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时 ...

  5. jenkins + pipeline构建自动化部署

    一.引言 Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息 ...

  6. 工具-infer,静态代码检测

    1.工具介绍 Infer 是一个静态程序分析工具,可以对 Java.C 和 Objective-C 程序进行分析,此工具是用 OCaml写成的.https://github.com/facebook/ ...

  7. Jenkins自动构建VS的代码20150607

    1. 安装Jenkins Ø 双击安装即可,如果需要,可以配置环境变量(一般没设置) Ø 在浏览器中输入:http://localhost:8080/打开jekins,及完成jenkins安装 Ø 如 ...

  8. 静态代码检测CppCheck的使用

    CppCheck的官网下载地址:http://cppcheck.sourceforge.net/ 使用方法有两种: 一:以VS插件的形式使用 二:直接使用客户端界面的GUI,来进行检测 第二种方法忽略 ...

  9. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

随机推荐

  1. VS2013调试的时候出现 “检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法”

    在web.config里面添加了下面一句,完美解决 <system.webServer> <validation validateIntegratedModeConfiguratio ...

  2. inux平台的C与C++

    课堂里学不到的C与C++那些事(一) 首先,声明一下这是一个系列的文章.至于整个系列有多少篇,笔者也不知道,不知道有多少篇,也不知道多久会更新一篇.反正只有一个原则,写出来的文 章能见得人才会公布出来 ...

  3. ios基金会-XCode温馨提示

    (一个)代号规格pragma mark 1.定义 #pragma 开头的代码是一条编译器指令,是一个特定于程序或编译器的指令. 不一定适用于其他编译器或其他环境.假设编译器不能识别该指令.则会将其忽略 ...

  4. 手机web下拉加载

    //需要 zepto.js支持 var page=0;//当前页 var pages=1;//总页数 var ajax=!1;//是否加载中 Zepto(function($){ $(window). ...

  5. Math.random引发的骗术,绝对是用随机数骗前端妹纸的最佳方法

    我觉得今天我运气特好,今天我们来赌一赌,我们来搞个随机数,Math.floor(Math.random() * 10),如果这个数等于0到7,这个月的饭,我全请了,如果是8或9,你就请一个礼拜成不?于 ...

  6. hadoop搭建开发环境及编写Hello World

    hadoop搭建开发环境及编写Hello World   本文地址:http://www.cnblogs.com/archimedes/p/hadoop-helloworld.html,转载请注明源地 ...

  7. Java 异常归纳总结

    1.异常的分类 1) Checked exception: 这类异常都是Exception的子类 .异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A异常.可能导致 ...

  8. Unity3D开发必备神器(Visual Studio Tools for Unity)

    Unity3D开发必备神器(Visual Studio Tools for Unity) 开发Unity3D程序你用的什么IDE呢? 1.MonoDevelop 2.VS 可能你的回答是这样的,我用的 ...

  9. .net操作PDF的一些资源(downmoon收集)

    因为业务需要,搜集了一些.net操作pdf的一些资源,特在此分享. 1.如何从 Adobe 可移植文档格式 (PDF) 文件中复制文本和图形 http://support.microsoft.com/ ...

  10. .NET MVC4 实训记录之一(引入Unity3.0 Ioc框架)

    一直在做维护项目,没有机会接触完整的架构,于是自学.NET MVC.自今日起,将自学的过程.遇到的问题以及解决方案记录下来. 在WebApp项目中右键,使用NuGet引入Unity3.0.