Updates and errata

Chapter 2 - Installation and basic operation

Page 16 - You can now use annotations as well as NOPMD to silence warnings.

Chapter 4 - Integrated Development Environment (IDE) plugins

Page 31 - There's now a PMD extension for the BlueJ IDE. Installation instructions are here.

Page 37 - The JDeveloper extension now works with the "Update Center" feature to make installation and updates much simpler; more details are in the IDE documentation here.

Page 40 - The JBuilder Opentool now includes better copy/paste detector support.

Chapter 5 - Detecting duplicate code

Page 49 - As of PMD 3.4, CPD has explicitly named command line arguments. So the first example in section 5.3 is now:

java net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 --files /path/to/files
and the second example (which specifies a language to check) is now:
java net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 --files /path/to/files --language cpp

Chapter 7 - Writing rules

Page 63 - The example code is now available online.

Page 64 - A ruleset element now has an optional language attribute. This can be either java or jsp; the default value is java.

Appendix

Page 139 - There's now a migrating ruleset to aid in moving code from one JDK version to another. Rather than using this ruleset directly you should use one of the wrapper rulesets, such as migrating_to_13, migrating_to_14, or migrating_to_15.