Running PMD via command line

  • Type pmd [filename|jar or zip file containing source code|directory] [report format] [ruleset file], i.e:


  • C:\tmp\pmd-3.1\pmd\bin>pmd c:\data\pmd\pmd\test-data\Unused1.java xml rulesets/unusedcode.xml
    <?xml version="1.0"?><pmd>
    <file name="c:\data\pmd\pmd\test-data\Unused1.java">
    <violation line="5" rule="UnusedLocalVariable">
    Avoid unused local variables such as 'fr'
    </violation>
    </file></pmd>
    
    C:\tmp\pmd-3.1\pmd\bin>
        

    You can pass a file name, a directory name, or a jar or zip file name containing Java source code to PMD.

    Also, the PMD binary distribution includes the ruleset files inside the jar file - even though the "rulesets/unusedcode.xml" parameter above looks like a filesystem reference, it's really being used by a getResourceAsStream() call to load it out of the PMD jar file. And the same applies to the example below.

  • If you are using JDK 1.3 or you just want to run PMD without the batch file, you can do a:
  • C:\data\pmd\pmd>java -cp lib\pmd-3.1.jar;lib\xercesImpl-2.6.2.jar;
                        lib\xmlParserAPIs-2.6.2.jar;lib\jaxen-core-1.0-fcs.jar;lib\saxpath-1.0-fcs.jar
                         net.sourceforge.pmd.PMD
                         c:\j2sdk1.4.1_01\src\java\lang xml
                         rulesets/imports.xml
           


  • Notice that in this case the output is in XML, so you can redirect it to a file and XSLT it or whatever
  • You can also use shortened names to refer to the built-in rulesets, like this:
  • java net.sourceforge.pmd.PMD /path/to/source text basic,imports,unusedcode
           
  • The command line interface also accepts the following optional arguments:
    • -debug - prints a stacktrace if an error is encountered
    • -shortnames - puts shortened names in the report. This only works if the filename argument is a single directory
    • -jdk13 - assumes JDK 1.3 language spec compatibility
    • -jdk15 - assumes JDK 1.5 language spec compatibility
    • -encoding Cp1252 - uses the specified encoding for reading the source code files
    • -excludemarker NOPMDFORME - uses the specified string of characters as the marker for PMD to ignore. The default string is "NOPMD".