# Pmd

API Documentation: | `Pmd`

Runs a set of static code analysis rules on Java source code files and generates a report of problems found.

### Properties

Property | Description
`classpath` | Compile class path for the classes to be analyzed. The classes on this class path are used during analysis but aren't analyzed themselves. This is only well supported for PMD 5.2.1 or better.
`consoleOutput` | Whether or not to write PMD results to `System.out`.
`excludes` | The set of exclude patterns.
`ignoreFailures` | Whether or not to allow the build to continue if there are warnings.
`includes` | The set of include patterns.
`incrementalAnalysis` | Controls whether to use incremental analysis or not. This is only supported for PMD 6.0.0 or better. See https://pmd.github.io/pmd-6.39.0/pmd_userdocs_incremental_analysis.html for more details.
`maxFailures` | The maximum number of failures to allow before stopping the build. Defaults to 0, which will stop the build on any failure. Values 0 and above are valid. If
`pmdClasspath` | The class path containing the PMD library to be used.
`reports` | The reports to be generated by this task.
`ruleSetConfig` | The custom rule set to be used (if any). Replaces `ruleSetFiles`, except that it does not currently support multiple rule sets. See the official documentation for how to author a rule set.
`ruleSetFiles` | The custom rule set files to be used. See the official documentation for how to author a rule set file. If you want to only use custom rule sets, you must clear `ruleSets`.
`ruleSets` | The built-in rule sets to be used. See the official list of built-in rule sets.
`rulesMinimumPriority` | Specifies the rule priority threshold.
`source` | The source for this task, after the include and exclude patterns have been applied. Ignores source files which do not exist.
`targetJdk` | The target JDK to use with PMD.
`threads` | Incubating Specifies the number of threads used by PMD.

### Methods

Method | Description
`exclude(excludeSpec)` | Adds an exclude spec. This method may be called multiple times to append new specs.The given closure is passed a `FileTreeElement` as its parameter. The closure should return true or false. Example:
`exclude(excludes)` | Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
`exclude(excludes)` | Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
`exclude(excludeSpec)` | Adds an exclude spec. This method may be called multiple times to append new specs. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
`include(includeSpec)` | Adds an include spec. This method may be called multiple times to append new specs. The given closure is passed a `FileTreeElement` as its parameter. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.
`include(includes)` | Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.
`include(includes)` | Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.
`include(includeSpec)` | Adds an include spec. This method may be called multiple times to append new specs. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.
`reports(configureAction)` | Configures the reports to be generated by this task.
`source(sources)` | Adds some source to this task. The given source objects will be evaluated as per `Project.files(java.lang.Object[])`.

### Script blocks

Block | Description
`reports` | Configures the reports to be generated by this task.

### Property details

#### `FileCollection` `classpath`

Compile class path for the classes to be analyzed. The classes on this class path are used during analysis but aren't analyzed themselves. This is only well supported for PMD 5.2.1 or better.

Default with `pmd` plugin:
  ``sourceSet`.output` and ``sourceSet`.compileClasspath`

#### `boolean` `consoleOutput`

Whether or not to write PMD results to `System.out`.

Default with `pmd` plugin:
  `project.pmd.consoleOutput`

#### ``Set`<`String`>` `excludes`

The set of exclude patterns.

#### `boolean` `ignoreFailures`

Whether or not to allow the build to continue if there are warnings.

    ignoreFailures = true

Default with `pmd` plugin:
  `project.pmd.ignoreFailures`

#### ``Set`<`String`>` `includes`

The set of include patterns.

#### ``Property`<`Boolean`>` `incrementalAnalysis`

Controls whether to use incremental analysis or not. This is only supported for PMD 6.0.0 or better. See https://pmd.github.io/pmd-6.39.0/pmd_userdocs_incremental_analysis.html for more details.

Default with `pmd` plugin:
  `false`

#### ``Property`<`Integer`>` `maxFailures`

The maximum number of failures to allow before stopping the build. Defaults to 0, which will stop the build on any failure. Values 0 and above are valid. If

    ignoreFailures

is set, this is ignored and the build will continue (infinite failures allowed).

Default with `pmd` plugin:
  `project.pmd.maxFailures`

#### `FileCollection` `pmdClasspath`

The class path containing the PMD library to be used.

Default with `pmd` plugin:
  `project.configurations.pmd`

#### `PmdReports` `reports` (read-only)

The reports to be generated by this task.

#### `TextResource` `ruleSetConfig`

The custom rule set to be used (if any). Replaces `ruleSetFiles`, except that it does not currently support multiple rule sets. See the official documentation for how to author a rule set.

    ruleSetConfig = resources.text.fromFile(resources.file("config/pmd/myRuleSets.xml"))

Default with `pmd` plugin:
  `project.pmd.ruleSetConfig`

#### `FileCollection` `ruleSetFiles`

The custom rule set files to be used. See the official documentation for how to author a rule set file. If you want to only use custom rule sets, you must clear `ruleSets`.

    ruleSetFiles = files("config/pmd/myRuleSet.xml")

Default with `pmd` plugin:
  `project.pmd.ruleSetFiles`

#### ``List`<`String`>` `ruleSets`

The built-in rule sets to be used. See the official list of built-in rule sets.

    ruleSets = ["basic", "braces"]

Default with `pmd` plugin:
  `project.pmd.ruleSets`

#### ``Property`<`Integer`>` `rulesMinimumPriority`

Specifies the rule priority threshold.

Default with `pmd` plugin:
  `project.pmd.rulesMinimumPriority`

#### `FileTree` `source` (read-only)

The source for this task, after the include and exclude patterns have been applied. Ignores source files which do not exist.

The `PathSensitivity` for the sources is configured to be `PathSensitivity.ABSOLUTE`. If your sources are less strict, please change it accordingly by overriding this method in your subclass.

Default with `pmd` plugin:
  ``sourceSet`.allJava`

#### `TargetJdk` `targetJdk`

The target JDK to use with PMD.

Default with `pmd` plugin:
  `project.pmd.targetJdk`

#### ``Property`<`Integer`>` `threads`

Note: This property is incubating and may change in a future version of Gradle.

Specifies the number of threads used by PMD.

Default with `pmd` plugin:
  `1`

### Method details

#### `SourceTask` `exclude`(`Closure` excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs.The given closure is passed a `FileTreeElement` as its parameter. The closure should return true or false. Example:

    copySpec {
      from 'source'
      into 'destination'
      //an example of excluding files from certain configuration:
      exclude { it.file in configurations.someConf.files }
    }

If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

#### `SourceTask` `exclude`(``Iterable`<`String`>` excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

#### `SourceTask` `exclude`(``String`...` excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

#### `SourceTask` `exclude`(``Spec`<`FileTreeElement`>` excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

#### `SourceTask` `include`(`Closure` includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. The given closure is passed a `FileTreeElement` as its parameter. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

#### `SourceTask` `include`(``Iterable`<`String`>` includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

#### `SourceTask` `include`(``String`...` includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

#### `SourceTask` `include`(``Spec`<`FileTreeElement`>` includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

#### `PmdReports` `reports`(``Action`<? super `PmdReports`>` configureAction)

Configures the reports to be generated by this task.

#### `SourceTask` `source`(``Object`...` sources)

Adds some source to this task. The given source objects will be evaluated as per `Project.files(java.lang.Object[])`.

### Script block details

#### `reports` { }

Configures the reports to be generated by this task.

Delegates to:
  `PmdReports` from `reports`