The PMD plugin performs quality checks on your project’s Java source files using PMD and generates reports from these checks.

Usage

To use the PMD plugin, include the following in your build script:

build.gradle.kts
plugins {
    pmd
}
build.gradle
plugins {
    id 'pmd'
}

The plugin adds a number of tasks to the project that perform the quality checks. You can execute the checks by running gradle check.

Note that PMD will run with the same Java version used to run Gradle.

Tasks

The PMD plugin adds the following tasks to the project:

pmdMainPmd

Runs PMD against the production Java source files.

pmdTestPmd

Runs PMD against the test Java source files.

The PMD plugin adds the following dependencies to tasks defined by the Java plugin.

Table 1. PMD plugin - additional task dependencies
Task name Depends on

check

All PMD tasks, including pmdMain and pmdTest.

Dependency management

The PMD plugin adds the following dependency configurations:

Table 2. PMD plugin - dependency configurations
Name Meaning

pmd

The PMD libraries to use

pmdAux

The additional libraries that are available for type resolution during analysis. This might be useful if PMD complains about missing classes.

Configuration

build.gradle.kts
pmd {
    isConsoleOutput = true
    toolVersion = "7.0.0"
    rulesMinimumPriority = 5
    ruleSets = listOf("category/java/errorprone.xml", "category/java/bestpractices.xml")
}
build.gradle
pmd {
    consoleOutput = true
    toolVersion = "7.0.0"
    rulesMinimumPriority = 5
    ruleSets = ["category/java/errorprone.xml", "category/java/bestpractices.xml"]
}

See the PmdExtension class in the API documentation.

Parallel analysis

You can configure the number of threads to be used by PMD for running its analysis.

build.gradle.kts
pmd {
    threads = 4
}
build.gradle
pmd {
    threads = 4
}

This configuration is internal to PMD and is not linked to the number of workers used by Gradle. It means that you have to pay attention to the value entered here and make sure it still makes sense in a multi project build. This is because parallel Gradle task execution could result in different PMD tasks from different projects running in parallel. If multiple PMD tasks execute simultaneously in n projects, then up to a maximum of (n * thread) PMD threads could run at the same time.