##### Overview

- Download PMD 3.9
- What's new in PMD 3.9
- 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
- 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

##### For example

- Run PMD on a Sourceforge project

##### Rule Sets

- Index
- 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 PMD
- Project Info
  - Mailing Lists
  - Project Team
  - Dependencies
  - Source Repository
  - Issue Tracking
- Project Reports
- Development Process

## Web Access

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/pmd/

## Anonymous Access with Maven

This project's CVS repository can be checked out through anonymous (pserver) CVS with the following instruction on a single line.

              maven scm:checkout-project
                -Dmaven.scm.method=cvs
                -Dmaven.scm.cvs.module=pmd
                -Dmaven.scm.cvs.root=:pserver:anonymous@pmd.cvs.sourceforge.net:/cvsroot/pmd
                -Dmaven.scm.checkout.dir=.

## Anonymous CVS Access

This project's CVS repository can be checked out through anonymous (pserver) CVS with the following instruction set. When prompted for a password for anonymous, simply press the Enter key.

cvs -d :pserver:anonymous@pmd.cvs.sourceforge.net:/cvsroot/pmd login
cvs -z3 -d :pserver:anonymous@pmd.cvs.sourceforge.net:/cvsroot/pmd co pmd

Updates from within the module's directory do not need the -d parameter.

## Developer Access with Maven

Only project developers can access the CVS tree via this method. Substitute username with the proper value.

              maven scm:checkout-project
                -Dmaven.scm.method=cvs
                -Dmaven.scm.cvs.module=pmd
                -Dmaven.scm.cvs.root=:ext:username@cvs.sourceforge.net:/cvsroot/pmd
                -Dmaven.scm.checkout.dir=.
                -Dmaven.scm.cvs.rsh=ssh

Remember to replace 'username' with your actual username on cvs.sourceforge.net.
Also change `ssh` in `maven.scm.cvs.rsh=ssh` to the name of your ssh executable.

## Developer CVS Access via SSH

Only project developers can access the CVS tree via this method. SSH1 must be installed on your client machine. Substitute username with the proper value. Enter your site password when prompted.

export CVS_RSH=ssh
cvs -z3 -d :ext:username@cvs.sourceforge.net:/cvsroot/pmd co pmd

Remember to replace 'username' with your actual username on cvs.sourceforge.net.

## CVS Access behind a firewall

For those developers who are stuck behind a corporate firewall, CVSGrab can use the viewcvs web interface to checkout the source code.