1.什么是pmd插件?
PMD 插件允许您在项目的源代码上自动运行PMD代码分析工具,并生成带有其结果的站点报告。它还支持与 PMD 一起分发的单独的复制/粘贴检测器工具(或 CPD)。 此版本的 Maven PMD 插件使用 PMD 6.42.0 并且需要 Java 8。有关更多信息,请参阅在运行时升级 PMD 。 该插件接受可用于自定义 PMD 工具执行的配置参数。
目标概述
这个插件有以下目标:
- pmd:pmd根据插件中的规则集和配置集创建 PMD 站点报告。除了站点报告之外,它还可以生成以下任何格式的 pmd 输出文件:xml、csv 或 txt。
- pmd:aggregate-pmd根据插件中设置的规则集和配置在聚合器项目中创建 PMD 站点报告。除了站点报告之外,它还可以生成以下任何格式的 pmd 输出文件:xml、csv 或 txt。
- pmd:aggregate-pmd-no-fork在聚合器项目中创建 PMD 站点报告,而无需再次分叉测试编译阶段。
- pmd:cpd为 PMD 的复制/粘贴检测器 (CPD) 工具创建报告。它还可以生成以下任何格式的 cpd 结果文件:xml、csv 或 txt。
- pmd:aggregate-cpd在聚合器项目中为 PMD 的复制/粘贴检测器 (CPD) 工具创建报告。它还可以生成以下任何格式的 cpd 结果文件:xml、csv 或 txt。
- 如果源代码中存在任何 PMD 违规,则pmd:check会导致构建失败。此目标在执行自身之前自动调用pmd:pmd 。
- 如果源代码中存在任何 PMD 违规,则pmd:aggregate-pmd-check会使聚合器项目中的构建失败。此目标在执行自身之前自动调用pmd:aggregate-pmd 。
- 如果源代码中存在任何 CPD 违规,则pmd:cpd-check会使构建失败。此目标在执行自身之前自动调用pmd:cpd 。
- 如果源代码中存在任何 CPD 违规,则pmd:aggregate-cpd-check会使聚合器项目中的构建失败。此目标在执行自身之前自动调用pmd:aggregate-cpd 。
2.代码工程
实验目的
使用pmd检查项目中的代码是否违规
第一种方法:maven插件集成
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-demo</artifactId>
<groupId>com.et</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>pmd</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<pmd.version>3.15.0</pmd.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${pmd.version}</version>
<configuration>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
<targetJdk>${maven.compiler.target}</targetJdk>
<excludes>
<!--<exclude>**/*Bean.java</exclude>-->
<!--<exclude>**/generated/*.java</exclude>-->
</excludes>
<excludeRoots>
<!--<excludeRoot>target/generated-sources/stubs</excludeRoot>-->
</excludeRoots>
<rulesets>
<ruleset>rulesets/java/quickstart.xml</ruleset>
</rulesets>
<outputDirectory>target/pmd-reports</outputDirectory>
</configuration>
<!--在clean后自动执行check-->
<!--<executions>-->
<!--<execution>-->
<!--<id>pmd-check</id>-->
<!--<phase>clean</phase>-->
<!--<goals>-->
<!--<goal>check</goal>-->
<!--</goals>-->
<!--</execution>-->
<!--</executions>-->
</plugin>
</plugins>
</build>
</project>
第二种方法:ideal插件
安装
使用
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
- GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.
3.测试
运行 mvn pmd:check ,target/pmd-reports/下会生成检测报告
4.引用
- Apache Maven PMD 插件 – 简介
- Spring Boot集成pmd插件快速入门Demo | Harries Blog™