Pratique de développement de règles PMD : créez votre propre outil de détection de la qualité du code

Je participe aux "Nuggets·Starting Plan"

  1. Présentation du PMD : Introduction au PMD.
  2. Installation et configuration : comment installer et configurer le plug-in PMD à utiliser dans vos projets.
  3. Comment utiliser le plugin PMD dans IDEA.
  4. Comment utiliser PMD dans les projets Java.
  5. Introduction au développement de règles PMD : explique comment écrire et utiliser des règles PMD personnalisées.
  6. Comment SonarQube intègre PMD : Comment SonarQube intègre PMD pour automatiser l'inspection de la qualité du code.
  7. Comment réduire les faux positifs : expliquez comment éviter les erreurs de rapport PMD et analysez comment utiliser correctement les règles PMD.

1. Présentation du PMD

PMD est un outil d'analyse de code statique open source permettant de vérifier les problèmes potentiels dans le code de Java, JavaScript, PLSQL et d'autres langages, tels que les variables inutilisées, les méthodes inutilisées, les instructions if invalides, etc. PMD vérifie les problèmes potentiels dans le code en l'analysant et en appliquant diverses règles. Ces règles peuvent être configurées selon les normes de qualité du code et les ensembles de règles peuvent être personnalisés. PMD fournit une variété de formats de sortie, y compris les formats de sortie de console, HTML, XML et JSON, qui permettent aux utilisateurs d'effectuer une analyse de code et un traitement des résultats. En outre, PMD fournit également des plug-ins pour divers IDE tels qu'Eclipse et IntelliJ IDEA, qui peuvent faciliter l'analyse du code et la résolution des problèmes dans l'IDE. En utilisant PMD, les développeurs peuvent trouver et résoudre plus rapidement les problèmes dans le code, améliorant ainsi la qualité et la maintenabilité du code.

2. Installation et configuration

Dans l'environnement Mac, PMD peut être installé via le gestionnaire de packages Homebrew. Voici les étapes pour installer et configurer PMD :

  1. Ouvrez l'application Terminal.
  2. Installez le gestionnaire de paquets Homebrew. Saisissez la commande suivante dans Terminal et appuyez sur Entrée :

/bin/bash -c "$(curl -fsSL raw.githubusercontent.com/Homebrew/in… %22)

  1. Installez PMD en utilisant Homebrew. Saisissez la commande suivante dans Terminal et appuyez sur Entrée :

infuser installer pmd

  1. Vérifiez que PMD est correctement installé. Saisissez la commande suivante dans Terminal et appuyez sur Entrée :

pmd -version

Si PMD est correctement installé, le terminal doit afficher le numéro de version de PMD.

  1. 配置PMD。可以通过创建一个PMD配置文件来配置PMD。在终端中输入以下命令并按回车键:

pmd config > ~/pmd.conf

该命令将在用户目录下创建一个名为pmd.conf的PMD配置文件。可以在该文件中指定要使用的规则和其他配置选项。

  1. 运行PMD。可以在终端中使用以下命令来运行PMD:

pmd -d /path/to/your/code -R /path/to/your/ruleset.xml -f text

命令分析:

  • -d选项指定要分析的代码的目录
  • -R选项指定规则集合的路径
  • -f选项指定输出格式(在这种情况下,输出将是文本格式,也可以根据需要更改这些选项。

3. IDEA中如何使用PMD插件

在IDEA中使用PMD插件可以帮助我们在开发过程中自动检测代码质量问题,提高代码质量和可维护性。下面是在IDEA中使用PMD插件并实践的步骤:

  1. 安装PMD插件:在IDEA中,打开Settings -> Plugins,搜索并安装PMD插件。
  2. 配置PMD插件:在IDEA中,打开Settings -> Other Settings -> PMD,配置PMD的相关参数,如PMD的安装路径、规则集、输出格式等。
  3. 运行PMD检测:在IDEA中,右键点击要检测的代码目录或文件,选择Run PMD检测,即可运行PMD检测并查看检测结果。
  4. 分析检测结果:在IDEA中,打开PMD检测结果窗口,可以查看PMD检测结果的详细信息,包括问题类型、问题所在的代码行数和文件名等,方便我们快速定位问题并进行修复。

4. Java项目中如何使用PMD

PMD这么强大,那么在开发项目中如何使用PMD进行代码扫描代码潜在问题呢?咱们就以Spring boot项目为例,看下如何实操。

Spring Boot项目中使用PMD的步骤:

  1. 在Spring Boot项目中添加PMD依赖。可以通过在pom.xml文件中添加以下代码来添加PMD依赖:
<dependency>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

</dependency>
  1. 配置PMD插件。可以在pom.xml文件中添加以下配置来定制PMD的行为:
<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

<executions>

<execution>

<goals>

<goal>check</goal>

</goals>

</execution>

</executions>

<configuration>

<rulesets>

<ruleset>/path/to/ruleset.xml</ruleset>

</rulesets>

<sourceEncoding>UTF-8</sourceEncoding>

<minimumTokens>30</minimumTokens>

<targetJdk>1.8</targetJdk>

<failOnViolation>true</failOnViolation>

</configuration>

</plugin>

</plugins>

</build>

这里配置了要使用的规则集、源代码编码、最小标记数量、目标JDK版本和违规时是否失败等选项。

  1. 运行PMD分析。可以使用Maven命令来运行PMD分析。例如,在命令行中执行以下命令:

mvn pmd:check

此命令将在项目中执行PMD分析,并生成一个名为“pmd.html”的HTML报告。可以在浏览器中打开该报告以查看分析结果。

  1. 分析结果展示。可以将PMD的分析结果显示在Spring Boot项目的页面上,以便开发人员查看并修复问题。可以将生成的HTML报告添加到Spring Boot项目的静态资源目录中,并使用Spring Boot内置的静态资源处理器来将其显示在页面上。

例如,在Spring Boot的应用类中添加以下代码:

@SpringBootApplication

public class MyApplication implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/pmd/**").addResourceLocations("classpath:/static/pmd/");

}

public static void main(String[] args) {

SpringApplication.run(MyApplication.class, args);

}

}

此代码将创建一个静态资源处理器,并将生成的HTML报告添加到“/pmd”路径下。然后可以在Spring Boot应用程序的页面中添加一个链接来查看PMD分析结果。例如:

PMD Report

这将在页面中创建一个名为“PMD Report”的链接,单击该链接将打开PMD分析结果的HTML报告。

5. PMD规则开发介绍

PMD是一个非常强大的静态代码分析工具,它能够识别出代码中的各种问题,如潜在的错误、低效的代码、不良的编码习惯等等。然而,尽管PMD已经提供了很多内置的规则,但是在实际的项目中,我们往往会有一些特定的需求,需要自定义一些规则来满足我们的需求

5.1 开发步骤

PMD自定义规则开发的一般步骤:

  1. 了解PMD的API和规则配置格式:在开始开发自定义规则之前,需要了解PMD的API,以及PMD规则配置文件的格式和基本元素。
  2. 定义规则:确定想要编写的规则。应该选择在代码库中发现的最常见的代码问题之一,然后制定相应的规则。
  3. 编写规则代码:使用PMD API编写自定义规则代码。可以使用Java或其他语言编写规则。
  4. 测试规则:编写单元测试,以确保的规则按预期工作,并捕获所有预期和非预期的情况。
  5. 打包规则:将规则打包成JAR文件。这可以通过使用Maven或其他构建工具来完成。
  6. 部署规则:将JAR文件部署到PMD或PMD插件中。
  7. 配置规则:在PMD或PMD插件中配置的规则。这通常涉及指定JAR文件的位置和指定规则的名称。
  8. 运行规则:在的代码库中运行PMD,以应用的规则并查找违规的代码。

5.2 常用API

PMD提供了一系列API,可以用于开发自定义规则和扩展PMD的功能。以下是一些重要的PMD API:

  1. Rule:表示PMD规则的类。规则包括要检查的问题和相应的解决方案。可以通过继承AbstractRule类来创建自定义规则。
  2. RuleContext:表示PMD规则的执行上下文。该类维护当前分析的代码和规则集合,并提供一些实用程序方法,例如报告问题。
  3. Node:表示抽象语法树(AST)中的节点。 AST是代码的结构化表示,用于分析和转换代码。 PMD使用AST表示代码,并将其用于规则检查。
  4. Parser:表示将源代码解析为AST的类。PMD支持许多不同的语言和框架,因此有多种解析器可用。
  5. RuleViolation:表示违反规则的代码问题。当检查到违反规则的代码时,PMD将创建一个RuleViolation实例,并将其添加到RuleContext中。
  6. Renderer:表示将规则违规报告渲染为文本、HTML或其他格式的类。 PMD提供了许多不同的渲染器,可以根据需要选择。
  7. XPathRule:表示使用XPath表达式来查找问题的规则。XPath是一种用于选择XML文档中特定元素的语言。PMD可以将XPath应用于AST,以选择符合特定条件的节点。
  8. RuleChain:表示一组规则,按特定顺序执行。例如,可以将规则按复杂性排序,并将它们作为一个规则链执行。

5.3 自定义规则开发实践

下面是一个简单的DuplicateImports规则的实现(检查代码中是否有重复导入类)。

  1. 创建类

创建一个类,继承AbstractJavaRule类,该类提供了访问Java源代码的方法,如visit方法可以访问Java类或方法。

public class DuplicateImportsRule extends AbstractJavaRule {

@Override

public void visit(CompilationUnit node, Object data) {

    List<ImportDeclaration> imports = node.getImports();

    Map<String, ImportDeclaration> importMap = new HashMap<>();

    for (ImportDeclaration importDeclaration : imports) {

    String importName = importDeclaration.getNameAsString();

    if (importMap.containsKey(importName)) {

    addViolationWithMessage(data, importDeclaration, "Duplicate import: " + importName);

} else {

    importMap.put(importName, importDeclaration);

            }

        }

    }

}

在visit方法中,我们首先获取编译单元中的所有导入语句,然后遍历这些导入语句,并将其名称存储在一个Map中。如果遇到重复的名称,则将其添加到违规列表中。

  1. 配置规则

创建一个配置文件,定义规则的名称和描述,以及实现该规则的类。

<rule name="DuplicateImports"

language="java"

message="Duplicate import: {0}">

<description>

Checks for duplicate import statements.

</description>

<priority>3</priority>

<example>

<![CDATA[

// Good

import java.util.List;

import java.util.ArrayList;

// Bad

import java.util.List;

import java.util.List;

]]>

</example>

<ruleclass>

DuplicateImportsRule

</ruleclass>

</rule>

在这个配置文件中,我们定义了规则名称、描述、优先级、示例以及实现该规则的类。

  1. 添加规则

在PMD配置文件中添加自定义规则。

<rule ref="rulesets/java/imports.xml">

<exclude name="DuplicateImports"/>

<rule ref="rules/custom.xml/DuplicateImportsRule"/>

</rule>

在这个配置中,我们从默认规则集中排除了DuplicateImports规则,并添加了我们自定义的DuplicateImportsRule规则。

  1. 运行PMD

运行PMD来检查重复导入语句。

mvn pmd:check

6.SonarQube如何集成PMD

  1. 下载并安装SonarQube

可以在SonarQube官网上找到最新版本的下载链接。下载完成后,可以通过以下命令将其解压缩到/opt目录中:

sudo tar -xzf sonarqube-.tar.gz -C /opt

其中,是SonarQube的版本号。解压缩完成后,可以使用以下命令启动SonarQube服务器:

sudo /opt/sonarqube-/bin/macosx-universal-64/sonar.sh start

  1. 安装PMD插件

打开SonarQube管理页面并导航到“Marketplace”选项卡。搜索“PMD”,然后选择“PMD”插件并单击“Install”按钮。安装完成后,将在“Installed”选项卡中看到“PMD”插件。

  1. 配置PMD规则

在SonarQube管理页面中导航到“Quality Profiles”选项卡并单击“Create”按钮。为配置文件设置名称,并将“PMD”选为静态代码分析工具。选择要使用的规则集并单击“Create”按钮以创建新的配置文件。

  1. 配置Maven

在Maven项目的pom.xml文件中添加以下代码段以配置Maven插件:

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

<executions>

<execution>

<phase>check</phase>

<goals>

<goal>pmd</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

将Maven的PMD插件版本设置为3.17.0,并将它配置为在“check”阶段运行PMD分析。

  1. 运行PMD分析

Accédez au répertoire racine du projet Maven sur la ligne de commande et exécutez la commande suivante pour exécuter l'analyse PMD :

mvn clean verify sonar:sonar \

-Dsonar.projectKey=my_project_key \

-Dsonar.host.url=[http://localhost:9000](http://localhost:9000/) \

-Dsonar.login=my_token

Parmi eux, remplacez « my_project_key » par l'identifiant unique du projet dans SonarQube ; remplacez « http://localhost:9000 » par l'URL de votre instance SonarQube ; remplacez « my_token » par votre jeton d'accès SonarQube.

Après avoir exécuté la commande, Maven exécutera l'analyse PMD et téléchargera les résultats sur le serveur SonarQube. Vous pouvez vous connecter à la page d'administration SonarQube et accéder au projet pour afficher les résultats de l'analyse PMD.

7. Comment réduire les faux positifs

PMD peut également provoquer des faux positifs, ce qui peut réduire la confiance des développeurs dans leurs résultats d'analyse. Voici quelques suggestions pour éviter les faux positifs PMD :

  1. Utilisez l'ensemble de règles approprié : PMD fournit plusieurs ensembles de règles, chacun ayant un objectif différent. L'utilisation d'un ensemble de règles approprié peut aider à réduire le nombre de faux positifs.
  2. Ensembles de règles personnalisés : PMD permet aux utilisateurs de personnaliser des ensembles de règles et d'ajouter ou de supprimer des règles. En créant des ensembles de règles personnalisés, les règles peuvent être adaptées aux besoins du projet, réduisant ainsi le nombre de faux positifs.
  3. Configurer les paramètres de règle : certaines règles de PMD peuvent être configurées via des paramètres. Par exemple, des paramètres tels que la taille de bloc maximale ou la longueur de classe maximale peuvent être définis pour réduire le nombre de faux positifs.
  4. Exclure des fichiers ou des répertoires spécifiques : si certains fichiers ou répertoires du code n'ont pas besoin d'être analysés par PMD, vous pouvez exclure ces fichiers ou répertoires en ajoutant des éléments d'exclusion dans le fichier de configuration.
  5. Utiliser des plug-ins IDE : de nombreux environnements de développement intégrés (IDE) fournissent des plug-ins PMD, qui peuvent aider les développeurs à détecter à temps les problèmes potentiels lors de l'écriture de code. Utilisez un plugin IDE pour éviter les faux positifs excessifs pendant la construction.
  6. Vérifiez et corrigez régulièrement les problèmes : bien que PMD puisse aider les développeurs à détecter les problèmes potentiels, la résolution des problèmes nécessite toujours une intervention humaine. Vérifier et corriger régulièrement les problèmes peut réduire le nombre de faux positifs et améliorer la qualité de votre code.

Je suppose que tu aimes

Origine juejin.im/post/7234893047283597370
conseillé
Classement