2016-09-07 16:10:48 -04:00
|
|
|
---
|
2018-05-24 17:23:44 +02:00
|
|
|
title: Documentation Index
|
2016-09-07 22:17:39 -04:00
|
|
|
keywords: java
|
2016-09-07 16:10:48 -04:00
|
|
|
permalink: index.html
|
2017-08-18 10:33:43 +02:00
|
|
|
toc: false
|
|
|
|
summary: >
|
2018-05-27 19:55:42 +02:00
|
|
|
Welcome to the documentation site for PMD and CPD! <br/><br/>
|
|
|
|
|
|
|
|
|
2022-10-06 16:25:20 +02:00
|
|
|
last_updated: October 2022
|
2018-05-23 15:55:51 +02:00
|
|
|
author: Jeff Jensen <jjensen@apache.org>, Andreas Dangel <andreas.dangel@adangel.org>,
|
|
|
|
Clément Fournier <clement.fournier76@gmail.com>
|
2016-09-07 16:10:48 -04:00
|
|
|
|
2020-09-20 20:03:44 +02:00
|
|
|
additional_js:
|
|
|
|
- assets/Shuffle-5.2.3/dist/shuffle.min.js
|
|
|
|
- assets/jquery-ui-1.12.1/jquery-ui.min.js
|
|
|
|
- js/shuffle.js
|
|
|
|
---
|
2018-05-20 09:27:36 +02:00
|
|
|
|
2018-05-21 08:30:37 +02:00
|
|
|
|
2018-05-21 16:49:12 +02:00
|
|
|
|
2021-09-09 15:26:35 +02:00
|
|
|
## 💡 Overview
|
2018-05-27 19:55:42 +02:00
|
|
|
|
|
|
|
<!-- You can link to an individual panel, the id is determined from the title of the panel -->
|
|
|
|
<!-- See custom/shuffle_panel.html for the details -->
|
|
|
|
|
2024-05-03 19:47:22 +02:00
|
|
|
**PMD** is an extensible multilanguage static code analyzer. It finds common programming flaws like unused variables,
|
|
|
|
empty catch blocks, unnecessary object creation, and so forth. It's mainly concerned with **Java and
|
|
|
|
Apex**, but **supports 16 other languages**. It comes with **400+ built-in rules**. It can be
|
|
|
|
extended with custom rules. It uses JavaCC and Antlr to parse source files into abstract syntax trees
|
|
|
|
(AST) and runs rules against them to find violations. Rules can be written in Java or using a XPath query.
|
|
|
|
|
|
|
|
Currently, PMD supports Java, JavaScript, Salesforce.com Apex and Visualforce,
|
|
|
|
Kotlin, Swift, Modelica, PLSQL, Apache Velocity, JSP, WSDL, Maven POM, HTML, XML and XSL.
|
|
|
|
Scala is supported, but there are currently no Scala rules available.
|
|
|
|
|
|
|
|
Additionally, it includes **CPD**, the copy-paste-detector. CPD finds duplicated code in
|
|
|
|
Coco, C/C++, C#, Dart, Fortran, Gherkin, Go, Groovy, HTML, Java, JavaScript, JSP, Julia, Kotlin,
|
|
|
|
Lua, Matlab, Modelica, Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex and
|
|
|
|
Visualforce, Scala, Swift, T-SQL, Typescript, Apache Velocity, WSDL, XML and XSL.
|
2018-05-27 19:55:42 +02:00
|
|
|
|
|
|
|
PMD features many **built-in checks** (in PMD lingo, *rules*), which are documented
|
|
|
|
for each language in our [Rule references](#shuffle-panel-rule-references). We
|
|
|
|
also support an extensive API to [**write your own rules**](#shuffle-panel-writing-rules),
|
|
|
|
which you can do either in Java or as a self-contained XPath query.
|
|
|
|
|
|
|
|
PMD is most useful when **integrated into your build process**. It can then be
|
2018-05-27 20:10:15 +02:00
|
|
|
used as a quality gate, to enforce a coding standard for your codebase. Among other
|
|
|
|
things, PMD can be run:
|
2018-05-27 19:55:42 +02:00
|
|
|
* As a [Maven goal](pmd_userdocs_tools_maven.html)
|
|
|
|
* As an [Ant task](pmd_userdocs_tools_ant.html)
|
2023-11-10 08:51:57 +01:00
|
|
|
* As a [Gradle task](pmd_userdocs_tools_gradle.html)
|
|
|
|
* As a [bld operation](pmd_userdocs_tools_bld.html)
|
2018-05-27 19:55:42 +02:00
|
|
|
* From [command-line](pmd_userdocs_installation.html#running-pmd-via-command-line)
|
|
|
|
|
2024-05-03 19:47:22 +02:00
|
|
|
**CPD**, the **copy-paste detector**, is also distributed with PMD. You can use it
|
2018-05-27 19:55:42 +02:00
|
|
|
in a variety of ways, which are [documented here](pmd_userdocs_cpd.html).
|
|
|
|
|
2021-09-09 15:26:35 +02:00
|
|
|
## 💾 Download
|
2018-05-27 19:55:42 +02:00
|
|
|
|
|
|
|
The latest release of PMD can be downloaded from our [Github releases page](https://github.com/pmd/pmd/releases/latest).
|
|
|
|
|
2020-05-29 10:40:32 +02:00
|
|
|
The Logo is available from the [Logo Project Page](pmd_projectdocs_logo.html).
|
2018-05-27 19:55:42 +02:00
|
|
|
|
2021-09-09 15:26:35 +02:00
|
|
|
## 📖 Documentation
|
2018-05-27 19:55:42 +02:00
|
|
|
|
|
|
|
The rest of this page exposes the contents of the documentation site thematically,
|
|
|
|
which you can further scope down using the blue filter buttons. To navigate the site,
|
|
|
|
you may also use the search bar in the top right, or the sidebar on the left.
|
|
|
|
|
2021-09-09 15:26:35 +02:00
|
|
|
## ✨ Contributors
|
|
|
|
|
|
|
|
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.
|
|
|
|
Contributions of any kind welcome!
|
|
|
|
|
|
|
|
See [credits](pmd_projectdocs_credits.html) for the complete list.
|
2018-05-27 19:55:42 +02:00
|
|
|
|
|
|
|
<br/>
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-21 16:49:12 +02:00
|
|
|
|
2018-05-23 15:55:51 +02:00
|
|
|
<div class="filter-options" id='grid-rule' >
|
2018-05-21 08:30:37 +02:00
|
|
|
<button class="btn btn-primary" data-group="all">All</button>
|
|
|
|
<button class="btn btn-primary" data-group="getting_started">Getting Started</button>
|
|
|
|
<button class="btn btn-primary" data-group="userdocs">User documentation</button>
|
|
|
|
<button class="btn btn-primary" data-group="extending">Extending PMD</button>
|
|
|
|
<button class="btn btn-primary" data-group="contributing">Contributing</button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
2018-05-21 16:49:12 +02:00
|
|
|
|
2018-05-21 01:02:58 +02:00
|
|
|
<div id="grid" class="row">
|
2018-05-20 09:27:36 +02:00
|
|
|
|
2018-05-23 15:55:51 +02:00
|
|
|
<!-- TODO the "getting started" panel is not that useful. It would be better to make a page series. -->
|
2018-05-21 01:02:58 +02:00
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Getting started"
|
2018-05-21 08:30:37 +02:00
|
|
|
tags="getting_started"
|
|
|
|
datagroups='["getting_started"]'
|
2018-05-27 19:55:42 +02:00
|
|
|
description="These pages summarize the gist of PMD usage to get you started quickly." %}
|
2018-05-20 09:27:36 +02:00
|
|
|
|
2018-05-20 21:38:54 +02:00
|
|
|
|
2018-05-21 01:02:58 +02:00
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Rule references"
|
2018-05-21 08:30:37 +02:00
|
|
|
tags="rule_references"
|
|
|
|
datagroups='["userdocs"]'
|
|
|
|
description="Pick your language to find out about the rule it supports."
|
2020-09-18 10:45:00 +02:00
|
|
|
fa-icon="fa-database"
|
2018-05-21 01:02:58 +02:00
|
|
|
titlemaker="page.language_name" %}
|
2018-05-20 21:38:54 +02:00
|
|
|
|
2018-05-21 08:30:37 +02:00
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Writing rules"
|
2018-05-21 08:30:37 +02:00
|
|
|
tags="userdocs,extending"
|
2018-05-21 11:52:05 +02:00
|
|
|
datagroups='["userdocs", "extending", "contributing"]'
|
2018-05-21 08:30:37 +02:00
|
|
|
description="These pages document the process of writing and testing custom rules and metrics for PMD."
|
|
|
|
%}
|
2018-05-20 21:38:54 +02:00
|
|
|
|
2018-05-21 11:52:05 +02:00
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Usage and configuration"
|
2018-05-21 11:52:05 +02:00
|
|
|
tags="userdocs"
|
|
|
|
except_tags="extending,tools"
|
|
|
|
datagroups='["userdocs"]'
|
2020-09-18 10:45:00 +02:00
|
|
|
fa-icon="fa-cog"
|
2018-05-21 11:52:05 +02:00
|
|
|
description="Learn how to build effective and versatile rulesets."
|
|
|
|
%}
|
|
|
|
|
|
|
|
|
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Contributing"
|
2018-05-21 11:52:05 +02:00
|
|
|
tags="devdocs"
|
|
|
|
except_tags="extending"
|
|
|
|
datagroups='["contributing"]'
|
2020-09-18 10:45:00 +02:00
|
|
|
fa-style="fab"
|
|
|
|
fa-icon="fa-github"
|
2018-05-21 11:52:05 +02:00
|
|
|
description="If you'd like to help us build PMD, these topics may interest you. See you around!"
|
|
|
|
%}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Tools and integrations"
|
2018-05-21 11:52:05 +02:00
|
|
|
tags="tools"
|
|
|
|
datagroups='["userdocs"]'
|
|
|
|
description="These pages describe solutions that integrate PMD within your build process."
|
|
|
|
%}
|
|
|
|
|
|
|
|
{% include custom/shuffle_panel.html
|
2018-05-27 19:55:42 +02:00
|
|
|
title="Major contributions"
|
2018-05-21 11:52:05 +02:00
|
|
|
tags="devdocs,extending"
|
|
|
|
datagroups='["contributing","extending"]'
|
|
|
|
description=""
|
|
|
|
%}
|
|
|
|
|
2020-09-19 20:21:53 +02:00
|
|
|
<!-- sizer -->
|
|
|
|
<div class="col-xs-6 col-sm-4 col-md-1 shuffle_sizer"></div>
|
2018-05-21 08:30:37 +02:00
|
|
|
</div>
|
2018-05-20 09:27:36 +02:00
|
|
|
|
|
|
|
<!-- {% include image.html file="pmd-logo-big.png" alt="PMD Logo" %} -->
|
2016-09-07 16:10:48 -04:00
|
|
|
|
2018-05-21 08:30:37 +02:00
|
|
|
|
2016-09-07 16:10:48 -04:00
|
|
|
{% include links.html %}
|