Sums up the first steps to set up a CLI installation and get started using PMD
Table of Contents How to install PMD and CPD RequirementsA zip archiver, e.g.:
Note: For executing the Designer (pmd designer
) using OpenJDK or Java 11+, you need additionally JavaFX. Download it, extract it and set the environment variable JAVAFX_HOME pointing at that directory.
PMD is distributed as a zip archive, which includes both PMD and CPD. You can download the latest binary distribution from the github releases page.
Itâs highly recommended (but not required) to include it to your PATH
.
On Linux you can do this by adding PATH=$PATH:*path_to_pmd*/bin/
to your ~/.bashrc
/ ~/.zshrc
file.
On Windows this is achieved by:
*path_to_pmd*/bin/
after the semicolon.PMD ships with built-in completion support for Bash / Zsh.
To enable it, simply add source <(pmd generate-completion)
to your ~/.bashrc
/ ~/.zshrc
file.
PMD comes with several command line utilities, like CPD, the rule designer or PMD itself. You can run any of them using the script
pmd
(
pmd.bat
under Windows), located inside the
bin/
directory of the PMD distribution. The first argument is the name of the utility you want to execute (âcheckâ, âdesignerâ, â¦), e.g. PMD is launched via
pmd check
. The rest of the arguments are specific to the utility used.
Running a PMD analysis (pmd check
or pmd.bat check
) requires at least one option and a list of sources:
-R <path>
: the ruleset file you want to use. PMD uses xml configuration files, called rulesets, which specify which rules to execute on your sources. You can also run a single rule by referencing it using its category and name (more details here). For example, you can check for unnecessary modifiers on Java sources with -R category/java/codestyle.xml/UnnecessaryModifier
.<source> â¦
: path to the sources to analyse. This can be a file name, a directory, or a jar or zip file containing the sources. Alternatively You can use the -d
or --dir
flag, which is equivalent. Note: At the moment the formerly provided rulesets (eg rulesets/java/basic.xml
) are deprecated, though you can still use them. PMD includes a quickstart ruleset for some languages (currently, Java) as base configurations, which you can reference as e.g. rulesets/java/quickstart.xml
. Youâre strongly encouraged to create your own ruleset from the start though.
Additionally, the following options, are specified most of the time even though theyâre not required:
-f <format>
: report format. PMD supports many report formats out of the box. You may want to start with the basic text
format (default) or xml
format. The supported formats are documented here.--aux-classpath <classpath>
: class path containing the compiled class files of the analysed Java sources, if any. Setting this up correctly allows PMD to do much deeper analysis using reflection. Some rules, such as MissingOverride, require it to function properly.A full CLI reference, including report formats, is available under
PMD CLI Reference Sample usageThe following shows a sample run of PMD with the text
format:
~ $ pmd check -f text -R rulesets/java/quickstart.xml src/main/java
.../src/main/java/com/me/RuleSet.java:123 These nested if statements could be combined
.../src/main/java/com/me/RuleSet.java:231 Useless parentheses.
.../src/main/java/com/me/RuleSet.java:232 Useless parentheses.
.../src/main/java/com/me/RuleSet.java:357 These nested if statements could be combined
.../src/main/java/com/me/RuleSetWriter.java:66 Avoid empty catch blocks
C:\> pmd.bat check -f text -R rulesets/java/quickstart.xml ..\..\src\main\java
...\src\main\java\com\me\RuleSet.java:123 These nested if statements could be combined
...\src\main\java\com\me\RuleSet.java:231 Useless parentheses.
...\src\main\java\com\me\RuleSet.java:232 Useless parentheses.
...\src\main\java\com\me\RuleSet.java:357 These nested if statements could be combined
...\src\main\java\com\me\RuleSetWriter.java:66 Avoid empty catch blocks
Running CPD via command line
Note: CPD supports Java, JSP, C, C++, C#, Fortran and PHP source code, among other languages. For the full list, see Supported Languages.
Like for PMD, CPD is started on Unix by pmd cpd
and on Windows by pmd.bat cpd
, and it requires one option and a list of sources:
--minimum-tokens <number>
: the minimum token length which should be reported as a duplicate.<source> â¦
: path to the sources to analyse. This can be a file name, a directory, or a jar or zip file containing the sources. Alternatively You can use the -d
or --dir
flag, which is equivalent.CPDâs command-line reference, Ant task usage, and many examples are documented in the
CPD documentation page Sample usageThe following shows a sample run of CPD with the text
format:
~ $ pmd cpd --minimum-tokens 100 /home/me/src
Found a 7 line (110 tokens) duplication in the following files:
Starting at line 579 of /home/me/src/test/java/foo/FooTypeTest.java
Starting at line 586 of /home/me/src/test/java/foo/FooTypeTest.java
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
C:\> pmd.bat cpd --minimum-tokens 100 c:\temp\src
Found a 7 line (110 tokens) duplication in the following files:
Starting at line 579 of c:\temp\src\test\java\foo\FooTypeTest.java
Starting at line 586 of c:\temp\src\test\java\foo\FooTypeTest.java
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
assertEquals(Boolean.TYPE, expressions.get(index++).getType());
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4