阿里巴巴Java代码规约插件p3c-pmd

2024-06-17 13:08

本文主要是介绍阿里巴巴Java代码规约插件p3c-pmd,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

clipse版插件支持4.2(Juno,JDK1.8+)及以上版本,通过 Help
-- Install New Software 然后输入https://p3c.alibaba.com/plugin/eclipse/update 即可看到安装列表。可以通过 Help-- Check for Udates 进行插件新版检测。


Eclipse插件安装
勾选Ali-CodeAnalysis,Next,安装完成后重启即可。


代码检查 Inspections

File-Settings-Editor- Inspections,打开后右侧找到Ali-Check,可以看到很多代码检查规则,可以修改规则对应提示的颜色。这里一共有55条规则。


Inspections
以编程规约之命名风格为例:

变量test_Double命名不符合驼峰形式,高亮显示,Ctrl+F1给出修改提示

驼峰形式变量名称
常量Test_CONSTANT命名不符合规范,高亮显示,Ctrl+F1给出修改提示

常量规范
代码分析Code Analyze

在当前类中右键或者在左侧Project视图中类名称上右键,选择Alibaba Coding Guidelines Analyze, 可以对某一个类进行代码分析;也可以直接在Project视图中,项目的包上面单击右键,选择Alibaba Coding Guidelines Analyze,可以批量分析包中所有类


Alibaba Coding Guidelines Analyze
分析结果在IDEA底部逐条给出,我们还是对上面的类进行分析,结果如下:


分析结果

单击红色矩形框可以跳转到代码所在行。

P3C-PMD插件实现规则说明

P3C-PMD插件基于PMD实现了《阿里巴巴Java开发手册》中涉及的48条规则。
编程规约 (六)并发处理,实现了1、2、3、4、5、10、11、12等8条规则;
编程规约(五)集合处理,实现了4、5、6、7、9、11等6条规则;
编程规约(一)命名风格,实现了1、2、3、4、5、6、7、8、9、13等10条规则;
编程规约(二)常量定义,实现了1、2等2条规则;
编程规约(四)OOP规约,实现了5、6、7、8、9、12、17等7条规则;
编程规约(七)控制语句,实现了1、2、4等3条规则;
编程规约(八)注释规约,实现了1、2、3、4、5等5条规则;
编程规约(九)其他,实现了1、3、4、5等4条规则;
异常日志 (一)异常处理,实现了5、7、10等3条规则;

PMD执行Java代码分析的原理

PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产生符合特定语法结构的语法,同时又在JavaCC的基础上添加了语义的概念即JJTree,通过JJTree的一次转换,这样就将Java代码转换成了一个AST,AST是Java符号流之上的语义层,PMD把AST处理成一个符号表。然后编写PMD规则,一个PMD规则可以看成是一个Visitor,通过遍历AST找出多个对象之间的一种特定模式,即代码所存在的问题。
自定义PMD实现规则有如下2种方式:
(1). 自定义Java类并继承AbstractJavaRule抽象类,重写visit()方法,并在xml规则文件中引用该类。

name:自定义规则的名字;
language:要检查的语言
message:该规则被触发时,给出的消息提示;
class:规则使用类的全类名;
description:规则的描述信息;
priority:优先级别,从高到低依次是1-Blocker, 2-Critical, 3-Urgent, 4-important, 5-Warning;
example:在CDATA标签中书写一个该规则对应的实例。
示例:

自定义Java类对应xml规则
(2). 自定义XPATH表达式,编写xml规则,在规则的properties-property节点中定义XPATH表达式,该表达式是依赖于抽象语法树AST的。

name:自定义规则的名字;
language:要检查的语言
message:该规则被触发时,给出的消息提示;
class: xPath规则统一配置为net.sourceforge.pmd.lang.rule. XPathRule;
description:规则的描述信息;
priority:优先级别,从高到低依次是1-Blocker, 2-Critical, 3-Urgent, 4-important, 5-Warning;
example:在CDATA标签中书写一个该规则对应的实例。
properties:这个是xpath必须配置的,其子节点property,value值使用CDATA标签配置对应的xpath表达式的形式,可以有多个property。
示例:

自定义XPATH
阿里代码规约插件p3c-pmd源码解析

p3c-pmd的项目开源托管在github上,可以自行去https://github.com/alibaba/p3c下载,项目是maven管理,项目代码结构如下:


p3c-pmd插件的实现是基于pmd的,更具体的来说是基于pmd-java的,因为pmd不仅支持java代码分析,还支持其他多种语言。具体实现自定义规则的方式当然也是上节所介绍的2种方式:自定义Java类和XPATH规则。
p3c-pmd插件封装了2个抽象类,分别介绍如下:
(1). 第一个是AbstractAliRule 继承了pmd的 AbstractJavaRule并重写visit(node,data)方法;AbstractPojoRule又继承了AbstractAliRule,用于检测Java类是否有Pojo。


第二个是AbstractXpathRule继承了pmd的抽象类XPathRule,用于处理XPATH规则。

这篇关于阿里巴巴Java代码规约插件p3c-pmd的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069529

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来