Un punto que no he visto hasta ahora es que hay complementos para IDE que harán cumplir los conjuntos de reglas CheckStyle en su código, mientras que los complementos de PMD solo informarán sobre violaciones. Por ejemplo, en un proyecto de varios sitios sobre varios equipos de programación, es importante hacer cumplir activamente los estándares, en lugar de solo informar sobre ellos.
Ambas herramientas tienen complementos disponibles para IntelliJ, NetBeans y Eclipse (en mi opinión, esto cubre la mayor parte del uso). No estoy tan familiarizado con NetBeans, por lo que solo puedo comentar sobre IntelliJ y Eclipse.
De todos modos, los complementos de PMD para IntelliJ y Eclipse generarán informes a pedido sobre violaciones de PMD dentro del código base del proyecto.
Los complementos CheckStyle, por otro lado, resaltarán las violaciones sobre la marcha y se pueden (al menos para IntelliJ, tengo menos experiencia con Eclipse) configurarse para convertir automáticamente algunos problemas (por ejemplo, para 'OneStatementPerLine', colocará CR-LF entre declaraciones, para 'NeedBraces', agregará llaves donde falten, etc.). Obviamente, solo las infracciones más simples se pueden corregir automáticamente, pero sigue siendo una ayuda en proyectos heredados o proyectos ubicados en varias ubicaciones.
"Bajo demanda" para PMD significa que el desarrollador debe decidir conscientemente ejecutar el informe. Mientras que las infracciones de Checkstyle se les informa automáticamente a medida que se desarrollan. Mientras PMD lo hace contener un conjunto de reglas más extensa, en mi mente la enforecement automática / notificación de violaciónes en entornos de desarrollo es la pena la molestia de mantener 2 conjuntos de reglas.
Entonces, para cualquier proyecto en el que trabajo, utilizamos ambas herramientas, Checkstyle aplicado en el IDE, PMD informado en el IDE, y ambos informados y medidos en compilaciones (a través de Jenkins).