PMD
Maven plugin
MVN Repository: https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-pmd-plugin
Source code: https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-pmd-plugin
Документация: https://maven.apache.org/plugins/maven-pmd-plugin/index.html
Правила
Документация: https://pmd.github.io/pmd/pmd_rules_java.html
Создание файла с правилами (ruleset): https://pmd.github.io/pmd/pmd_userdocs_making_rulesets.html
Пример
Здесь для удобства собираются отчёты в одну папку, чтобы завести по ним таски, и уже потом вычищать. Для этого в мульти-модульном проекте в каждом pom-файле надо указать параметр ${root.base-dir}.
<properties>
<root.base-dir>${project.parent.parent.basedir}</root.base-dir>
</properties>
В итоге, когда код будет исправлен, failOnViolation выставляется в true.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven-pmd-plugin.version}</version>
<configuration>
<failOnViolation>false</failOnViolation>
<printFailingErrors>true</printFailingErrors>
<minimumTokens>200</minimumTokens>
<analysisCache>true</analysisCache>
<linkXRef>false</linkXRef>
<includeTests>true</includeTests>
<failurePriority>5</failurePriority>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
<targetJdk>17</targetJdk>
<targetDirectory>${root.base-dir}/target/static-code-analysis-report/${project.name}</targetDirectory>
<rulesets>
<ruleset>static-code-analysis/pmd.xml</ruleset>
</rulesets>
<excludeRoots>
<excludeRoot>target/generated-sources</excludeRoot>
</excludeRoots>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
<goal>aggregate-cpd</goal>
<goal>aggregate-pmd</goal>
<!--<goal>aggregate-cpd-check</goal>-->
</goals>
</execution>
</executions>
</plugin>
Checkstyle
Maven plugin
MVN Repository: https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-checkstyle-plugin
Source code: https://github.com/apache/maven-checkstyle-plugin
Документация: https://maven.apache.org/plugins/maven-checkstyle-plugin/index.html
Правила
Документация: https://checkstyle.sourceforge.io/checks.html
Готовые наборы правил:
- Sun Microsystems Definition: https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/sun_checks.xml
Пример
Здесь отчёты тоже собираются в одну папку.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${checkstyle.plugin.version}</version>
<configuration>
<configLocation>${root.base-dir}/static-code-analysis/checkstyle.xml</configLocation>
<propertyExpansion>plugin.config.path=${plugin.config.path}</propertyExpansion>
<consoleOutput>true</consoleOutput>
<failOnViolation>false</failOnViolation>
<linkXRef>false</linkXRef>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<outputFile>${root.base-dir}/target/static-code-analysis-report/${project.name}/checkstyle.xml</outputFile>
<sourceDirectories>
<sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
<sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
</sourceDirectories>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Для того, чтобы в файле с правилами работали параметры
<module name="SuppressionXpathFilter">
<property name="file" value="${plugin.config.path}/checkstyle-suppressions-xpath-filter.xml"/>
</module>
надо их прокинуть при помощи propertyExpansion (см. stackoverflow).
SpotBugs
Maven plugin
MVN Repository: https://mvnrepository.com/artifact/com.github.spotbugs/spotbugs-maven-plugin
Документация: https://spotbugs.readthedocs.io/en/latest/maven.html
Правила
Документация: https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html
Filter file: https://spotbugs.readthedocs.io/en/latest/filter.html