Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-14509

PMD Plugin reporting existing warnings as new

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Not A Defect
    • Component/s: pmd-plugin
    • Labels:
    • Environment:
      Jenkins 1.474
      Jenkins Violations Plugin 0.7.10
      PMD Plugin 3.29
      Static analysis utilities 1.43
      Static analysis collector plugin 1.29
    • Similar Issues:

      Description

      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.

        Attachments

          Activity

          Hide
          david_resnick David Resnick added a comment -

          You are right, the file element contains a relative path

          <file name="com/dbconfig/app/BackupDatabase.java">

          caused by using the PMD ant target parameter shortFilenames=true.

          I set it to false and ran my build twice – it correctly reported no new/fixed warnings! (though it did report a new highscore of only successful builds for 33 days...)

          All duplicate code warnings are reported as new and fixed though.

          About PMD 4, I imagine that because of the shortFilenames parameter it also always showed each warning as new and fixed, though I don't have any previous builds to verify that on.

          Thanks a lot for your help, I consider this issue closed.

          I'll make sure to check how the dry plugin reports warnings once I update to 2.30.

          • David
          Show
          david_resnick David Resnick added a comment - You are right, the file element contains a relative path <file name="com/dbconfig/app/BackupDatabase.java"> caused by using the PMD ant target parameter shortFilenames=true. I set it to false and ran my build twice – it correctly reported no new/fixed warnings! (though it did report a new highscore of only successful builds for 33 days...) All duplicate code warnings are reported as new and fixed though. About PMD 4, I imagine that because of the shortFilenames parameter it also always showed each warning as new and fixed, though I don't have any previous builds to verify that on. Thanks a lot for your help, I consider this issue closed. I'll make sure to check how the dry plugin reports warnings once I update to 2.30. David
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in jenkins
          User: Ulli Hafner
          Path:
          src/main/java/hudson/plugins/pmd/parser/PmdParser.java
          http://jenkins-ci.org/commit/pmd-plugin/c2d0b6ddb814a9de28f1e6f02c26c055ccd78703
          Log:
          Revert "JENKINS-14509 Added debugging of exception to module name of bug."

          This reverts commit bc7267d5b8eae0e8d741dcbbea5571afd8e8d174.

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Ulli Hafner Path: src/main/java/hudson/plugins/pmd/parser/PmdParser.java http://jenkins-ci.org/commit/pmd-plugin/c2d0b6ddb814a9de28f1e6f02c26c055ccd78703 Log: Revert " JENKINS-14509 Added debugging of exception to module name of bug." This reverts commit bc7267d5b8eae0e8d741dcbbea5571afd8e8d174.
          Hide
          drulli Ulli Hafner added a comment -

          Thanks. I'm wondering if it is possible to derive the absolute file name in your case (to prevent others to step into the same trap). During parsing the absolute path to the workspace of a project on the slave is available in my plugin, however it seems that the source path is missing between workspace path and the file name that is reported by pmd com/dbconfig/app/BackupDatabase.java.

          Show
          drulli Ulli Hafner added a comment - Thanks. I'm wondering if it is possible to derive the absolute file name in your case (to prevent others to step into the same trap). During parsing the absolute path to the workspace of a project on the slave is available in my plugin, however it seems that the source path is missing between workspace path and the file name that is reported by pmd com/dbconfig/app/BackupDatabase.java.
          Hide
          david_resnick David Resnick added a comment -

          You would need to add some hairy heuristics to get from the pmd.xml report file to the root of the relative path filename it contains.

          In my case, the report file is at job-workspace/.../sub-project/build/reports/ while the source file is at job-workspace/.../sub-project/src/main/java/

          Show
          david_resnick David Resnick added a comment - You would need to add some hairy heuristics to get from the pmd.xml report file to the root of the relative path filename it contains. In my case, the report file is at job-workspace/.../sub-project/build/reports/ while the source file is at job-workspace/.../sub-project/src/main/java/
          Hide
          fushly fushly added a comment -

          Looks like the 'Warning Plugin' (https://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin) has the same issue.

          Show
          fushly fushly added a comment - Looks like the 'Warning Plugin' ( https://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin ) has the same issue.

            People

            • Assignee:
              drulli Ulli Hafner
              Reporter:
              david_resnick David Resnick
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: