Intellij IDEA 使用checkstyle、pmd、findbugs检查静态代码质量_pmd idea_码农-文若书生的博客-程序员资料

技术标签: idea findbugs checkstyle pmd  findbugs  java  pmd  checkstyle  

checkstye、pmd、findbugs的对比
在这里插入图片描述

在IDEA setting-plugins 下分别搜索 checkstyle、pmd、findbugs 安装,安装后要重启IDEA。

  1. checkstyle
    在这里插入图片描述
    如上图打开checkstyle面板。
    可以自己设置检查规则,在setting-other setting-Checkstyle,点击右上角+号添加自己的检查规则。下面是一个规则例子
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<!--
  规则版本号:V1.0(2018-05-11)
  本规则重在编程规范,请与PMD、FindBugs结合使用
-->
<module name="Checker">
    <!-- 每个java文件一个语法树 -->
    <module name="TreeWalker">

        <!--
        Javadoc Comments2
        -->
        <!--<module name="JavadocType"/>
        <module name="JavadocMethod">
            <property name="scope" value="protected"/>
            <property name="allowMissingPropertyJavadoc " value="true"/>
            <property name="logLoadErrors" value="true"/>
            <property name="suppressLoadErrors" value="true"/>
        </module>
        <module name="JavadocVariable">
            <property name="scope" value="public"/>
        </module>
        <module name="JavadocStyle">
            <property name="checkFirstSentence" value="false"/>
            <property name="checkEmptyJavadoc" value="true"/>
            <property name="checkHtml" value="false"/>
        </module>-->

        <!--
        Naming Conventions
        -->
        <module name="ConstantName">
            <property name="format" value="(^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)|(^log$)|(^logger$)"/>
        </module>
        <module name="LocalFinalVariableName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="LocalVariableName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="MemberName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="MethodName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="PackageName">
            <property name="format" value="^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"/>
        </module>
        <module name="ParameterName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="StaticVariableName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="TypeName">
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
        </module>


        <!-- import -->
        <!-- 避免使用* -->
        <module name="AvoidStarImport"/>
        <!-- 检查是否导入了多余的包 -->
        <module name="RedundantImport"/>
        <!-- 检查是否从非法的包中导入了类 -->
        <module name="IllegalImport"/>
        <!-- 没用的import检查 -->
        <module name="UnusedImports"/>

        <!--
       Size Violations
       -->
        <!--<module name="LineLength">
            <property name="max" value="120"/>
        </module>-->
        <module name="AnonInnerLength">
            <property name="max" value="60"/>
        </module>


        <!--
        Whitespace
        -->
        <module name="MethodParamPad"/>
        <module name="NoWhitespaceAfter"/>
        <module name="NoWhitespaceBefore"/>
        <module name="OperatorWrap"/>
        <module name="ParenPad"/>
        <module name="TypecastParenPad"/>
        <!--<module name="TabCharacter"/>-->
        <module name="WhitespaceAround">
            <property name="tokens" value="COLON,NOT_EQUAL,QUESTION,DIV,DIV_ASSIGN,BXOR,BXOR_ASSIGN,MINUS,LCURLY,RCURLY,STAR,STAR_ASSIGN,TYPE_EXTENSION_AND,BAND,LAND,BAND_ASSIGN,MOD,MOD_ASSIGN,PLUS,PLUS_ASSIGN,LT,SL,SL_ASSIGN,LE,ASSIGN,MINUS_ASSIGN,EQUAL,GT,GE,SR,SR_ASSIGN,BSR,BSR_ASSIGN,BOR,BOR_ASSIGN,LOR,LITERAL_ASSERT,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,SLIST,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE"/>
        </module>

        <!--
        Modifiers
        -->
        <module name="ModifierOrder"/>

        <!-- Block Checks -->
        <module name="EmptyBlock"/>
        <module name="LeftCurly">
            <property name="option" value="eol"/>
        </module>
        <module name="NeedBraces"/>
        <module name="RightCurly">
            <property name="option" value="alone"/>
        </module>
        <module name="AvoidNestedBlocks">
            <property name="allowInSwitchCase" value="true"/>
        </module>


        <!-- Coding -->
        <!-- 检查局部变量或参数是否隐藏了类中的变量 -->
        <module name="HiddenField">
            <property name="ignoreConstructorParameter" value="true"/>
            <property name="ignoreSetter" value="true"/>
            <property name="ignoreAbstractMethods" value="true"/>
        </module>
        <!-- 检查是否有"魔鬼"数字 -->
        <module name="MagicNumber">
            <property name="tokens" value="NUM_DOUBLE, NUM_FLOAT, NUM_LONG"/>
            <property name="ignoreNumbers" value="-1, 0, 1"/>
        </module>
        <!-- <module name="RedundantThrows">
            <property name="logLoadErrors" value="true"/>
            <property name="suppressLoadErrors" value="true"/>
        </module>-->
        <module name="NestedTryDepth">
            <property name="max" value="2"/>
        </module>
        <module name="IllegalThrows"/>
        <module name="DeclarationOrder"/>
        <module name="UnnecessaryParentheses"/>

        <!-- Class Design -->
        <module name="VisibilityModifier">
            <property name="packageAllowed" value="true"/>
            <property name="protectedAllowed" value="true"/>
        </module>
        <!--<module name="HideUtilityClassConstructor"/>    -->
        <module name="ThrowsCount">
            <property name="max" value="3"/>
        </module>

        <!-- Metrics -->
        <module name="BooleanExpressionComplexity">
            <property name="max" value="5"/>
        </module>

        <!-- Miscellaneous -->
        <!--<module name="Indentation"/>-->
        <module name="UncommentedMain"/>
    </module>
</module>

在checkstyle面板,点击检查按钮进行检查,也可以检查单个文件。
在这里插入图片描述

  1. pmd的使用
    在这里插入图片描述

  2. findbugs的使用
    在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011943534/article/details/83037496

智能推荐

计算机图形学c#版pdf,计算机图形学的数学工具与C#实现.pdf_weixin_39771969的博客-程序员资料

计算机图形学的数学工具与C#实现.pdf国外科技新书评介 2010年第2期 (总第274期) 计算机科学YoshifumiM asunagaAoyamaGakuin 务的系统结构中是必不可少的,为了进行University,Japanetaleds. 性能分析,要求用工作流方式来表示,该Advancesin Scalabl...

全面学习和应用ORACLE ASM特性_cuidun9470的博客-程序员资料

ORACLE10g版本推出时,为了简化RAC中存储端的配置,ORACLE新推出了ASM(Automatic Storage Management --自动存储管理)特性,该特性拥有易管理,高自动性,并且,拥有号称超越裸设备IO性...

SpringBoot--YAML配置_如果是yml文件,必须引snakeyaml 依赖解析吗_吴声子夜歌的博客-程序员资料

YAMLYAML是JSON的超集,简介而强大,是一种专门用来书写配置文件的语言,可以替代application.properties。在创建一个Spring Boot项目时,引入的spring-boot-starter-web依赖间接地引入了snakeyaml依赖,snakeyaml会实现对YAML配置的解析。YAML的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。在Spring Bo...

SSD框架详细解读(一)_ssd先验框_rainforestgreen的博客-程序员资料

目录模型结构Prior box默认框的产生Prior box 的大小尺寸计算输出层通道num_output计算。Priorbox的使用Permute,Flatten And Concat Layersmatching strategy:选择一系列default boxeshard negative miningdata augmentation技巧对比效果结...

推荐:细数Java开发者的艰辛历程_普通网友的博客-程序员资料

前言受到疫情影响我从过完年一直呆在家里,索性学点知识方便以后跳槽涨薪,于是从二月份开始学习阿里P8架构师纯手打的一份Java面经手册,没想到5月初我成功从我们三线的一个小公司跳槽进了腾讯,虽然等级不高,但是涨薪还是涨了8K,而且去一个大公司多学点东西,对自己的成长还是有好处的。虽然说是面经手册,但是里面的涵盖的知识点还是很全面、很细的,一共分了一下十几个大部分:java基础、集合类Set、锁volatile synchronized Lock ReentrantLock AQS C、java多线程:、J

随便推点

c语言如何为结构数组赋值,C语言结构体数组同时赋值的另类用法_爱雪君的博客-程序员资料

说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子:#include struct student{int a;int b ;int c ;};struct student array1[1000] ;int main(void){int i ;for(i = 0 ; i &lt; 1000 ; i++){array[i].a = 1 ;array[i].b = ...

子网掩码,网络号,主机号 计算问题。_可用网络号为什么要减去最小和最大_qq_21439291的博客-程序员资料

IPV4地址划分有三种:⑴ 由网络位+主机位组成。分为:A、B、C、D、E类,其中A、B、C是常用的,这个在很多书上都可以看到。①A类地址:网络号占8位(第一位为0),主机号占24位。网络号的范围:1~126(0000 0001~0111 1111)(注:为什么不到127? 因为127为网络保留,有其他作用;为什么没有0?网络号全为0为保留地址)最大可用网络数:126=2^

本地数据库与API调取的数据的同步_调第三方api本地要不要存数据,如何存_Dream丶mechinics的博客-程序员资料

最近做项目需要将通过API的到的数据存到本地,并且确保本地数据库中某张表的数据与数据源的数据保持一定的同步性,以下为解决问题的思路:1.在本地做好映射确保可以从外部访问,让api的提供方在数据库提供一个触发器,当数据提供方的数据发生变化时,主动同步到本地。(对方拒绝,扑街)2.用Mysql的repalce into 语句进行结合定时器来对数据的定时更新。3.网上还有一种思路是,从本地数据库调用此表中不变的字段...

查看树莓派IP地址以及VNC远程连接_查看vnc client端 ip_weixin_45464393的博客-程序员资料

1.先在终端输入sudo raspi-config2.找到Interfacing 进入3.开启vnc 重启树莓派4.打开windows下的 vnc viewer5.右上角点击File 创建新连接6.输入账号密码进行连接

BAT解密:互联网技术发展之路(8)- 用户层技术剖析_华仔爱技术的博客-程序员资料

互联网业务用户层技术主要包括:用户管理、消息推送、存储云、图片云。用户管理互联网业务的一个典型特征就是通过互联网将众多分散的用户连接起来,因此用户管理是互联网业务必不可少的一部分。稍微大一点的互联网业务,肯定会涉及到多个子系统,这些子系统不可能每个都自己来管理这么庞大的用户,由此引申出用户管理的第一个目标:SSO,单点登录,又叫统一登录。单点登录的技术实现手段较多,例如cookie、token等,

HAL库之读写STM32F103内部的FLASH空间_stm32f103 hal flash_天天搬砖,至死不渝的博客-程序员资料

在此声明——本文摘自这里:【码神岛】STM32F0x HAL库学习笔记(5)片内FLASH的读写操作本文开发环境MCU型号:STM32F103C8T6IDE环境: MDK 5.25代码生成工具:STM32CubeMx 5.0.1HAL库版本:v1.9.0本文内容MCU片内Flash(闪存)的擦除与读写一个Flash读写例子/*main.c中的代码*/void FLASH_EEPROM_Write(uint32_t n);uint32_t FLASH_EEPROM_Read(

推荐文章

热门文章

相关标签