Найти тему

N.B. Статический анализ кода в Java

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

Готовые наборы правил:

Пример

Здесь отчёты тоже собираются в одну папку.

<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

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц