-
Bug
-
Resolution: Not A Defect
-
Major
-
Jenkins 1.474
Jenkins Violations Plugin 0.7.10
PMD Plugin 3.29
Static analysis utilities 1.43
Static analysis collector plugin 1.29
Using the PMD plugin to detect and monitor PMD warnings that are found in my builds. I recently upgraded to PMD 5.0 and added a number of new PMD rules to my report.
The problem is that the PMD plugin seems to be almost completely incapable of differentiating between new and previously found PMD warnings.
For example, I got this from a recent build:
PMD: 1,306 warnings from one analysis.
1,304 new warnings
1,305 fixed warnings
Comparison between a warning entry generated by PMD 5.0 and the PMD plugin.
pmd.xml:
<violation beginline="29" endline="29" begincolumn="31" endcolumn="84" rule="LoggerIsNotStaticFinal" ruleset="Java Logging" package="com.dbconfig.app" class="BackupDatabase" variable="logger" externalInfoUrl="http://pmd.sourceforge.net/rules/java/logging-java.html#LoggerIsNotStaticFinal" priority="2">
The Logger variable declaration does not contain the static and final modifiers
</violation>
pmd-warnings.xml:
<bug>
<message>The Logger variable declaration does not contain the static and final modifiers.</message>
<priority>HIGH</priority>
<key>3660</key>
<lineRanges>
<range>
<start>29</start>
<end>29</end>
</range>
</lineRanges>
<primaryLineNumber>29</primaryLineNumber>
<fileName>/home/jenkins/slave-root/workspace/job-name/db-config/src/main/java/com/dbconfig/app/BackupDatabase.java</fileName>
<moduleName reference="../../bug[20]/moduleName"/>
<packageName reference="../../bug[31]/packageName"/>
<category>Java Logging</category>
<type>LoggerIsNotStaticFinal</type>
<contextHashCode>3661</contextHashCode>
<origin>pmd</origin>
<pathName>db-config/src/main/java/com/dbconfig/app</pathName>
<primaryColumnStart>31</primaryColumnStart>
<primaryColumnEnd>84</primaryColumnEnd>
<tooltip></tooltip>
</bug>
The job is freestyle (gradle), using ant task to run the PMD.
The filename is used to read the file and build a unique hash code of the surrounding 5 lines. This hash is used to see whether the warning actually has been changed. If the file could not be read, then a sequence number is used as hash (makes not much sense, but is kind of null pattern). So we need to investigate why the files could not be read. If this is OK for you then I will add some logging statement to a patched plug-in version to see why these files could not be read. (Are these files removed immediately after the build?)