##### Overview

- Download PMD 4.2.5
- What's new in PMD 4.2.5
- PMD in the news
- PMD-related products and books
- Best practices
- Future directions
- Similar projects
- Credits
- License
- What does 'PMD' mean?

##### Usage

- Installation
- Command line usage
- Ant task usage
- Maven plugin usage
- Mvn plugin usage
- IDE plugin usage
- Suppressing warnings
- Finding duplicated code
- JSP support

##### Customizing PMD

- Compiling PMD
- How to write a rule
- Writing XPath rules
- How to make a rule set
- How it works
- Rule guidelines

##### For example

- Run PMD on a Sourceforge project

##### Rule Sets

- Index
- Android
- Basic
- Braces
- Code Size
- Clone
- Controversial
- Coupling
- Design
- Finalizers
- Import Statements
- J2EE
- Javabeans
- JUnit Tests
- Logging (Java)
- Logging (Jakarta)
- Migrating
- Naming
- Optimizations
- Strict Exceptions
- Strings
- Sun Security
- Unused Code
- Java Server Pages
- Java Server Faces

##### Project Documentation

- About
- Project Info
- Project Reports
- Development Process

##### Legend

- External Link
- Opens in a new window

## Compiling PMD

First, you'll need to download and install Ant 1.6 and JUnit 3.8.2. I put the junit jar file in my ANT_HOME/lib/ directory and all was well, your mileage may vary.

Now you'll need to either check out the source code or download the latest source release. Assuming you've got the latest source release, unzip it to a directory:

            [tom@hal building]$ ls -l
            total 5716
            -rw-rw-r--    1 tom      tom       5837216 Jul 17 13:09 pmd-src-4.2.5.zip
            [tom@hal building]$ unzip -q pmd-src-4.2.5.zip
            [tom@hal building]$

Now cd down into the `pmd/bin` directory:

            [tom@hal building]$ cd pmd-4.2.5/bin/
            [tom@hal bin]$ ls -l | grep build.xml
            -rw-rw-r--    1 tom      tom          5736 Jun 19 15:36 build.xml
            [tom@hal bin]$

There's our Ant build file... let's compile!

            [tom@hal bin]$ ant compile
            Buildfile: build.xml

            compile:
                [javac] Compiling 509 source files to /home/tom/data/pmd/pmd/build

            BUILD SUCCESSFUL
            Total time: 6 seconds
            [tom@hal bin]$

Notes:

- There's also a build.xml in the top-level directory, but it's for Maven. Renaming it made Maven do odd things; anybody know how to get around that?
- The rules that have already been written are specified in the rulesets/ directory in the source distribution. They're also in the jar file that's included with both the source and binary distributions.

A paucity of detail, I'm sure you'd agree. If you think this document can be improved, please post here and let me know how. Thanks!