PMD【 Java 代码检查工具】入门使用教程,springcloud视频教程

  • 分析结果

  • 图形界面

    • 检测
  • 自定义规则

介绍

============================================================

PMD是一个静态源代码分析器。它发现了常见的编程缺陷,如未使用的变量、空捕获块、不必要的对象创建等等。

官网:点这里

官方文档:点这里

使用方式

==============================================================

1、使用插件的方式


下载:File -> Settings -> Plugins -> Marketplace 搜索 “PMDPlugin” ,下载插件。

使用方法:在代码编辑框或Project 窗口的文件夹、包、文件右键,选择“Run PMD”->“Pre Defined”->“All”,对指定的文件夹、包、文件进行分析,分析结果在控制台输出。

2、maven项目引入依赖的方式


pom.xml:

<?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”>

4.0.0

com.keafmd

pdm-test01

1.0-SNAPSHOT

org.apache.maven.plugins

maven-pmd-plugin

3.14.0

mvn 命令执行

在项目目录打开cmd窗口,输入以下命令:

mvn pmd:pmd

在这里插入图片描述

分析结果为pmd.html文件,在项目的target下的site目录下:

在这里插入图片描述

在这里插入图片描述

分析结果显示内容:

在这里插入图片描述

3、pmd 命令行的方式


pmd -d 源代码路径 -f xml(结果输出格式) -r 结果保存所在目录及名称 -R rulesets/java/unusedcode.xml

例子:

在这里插入图片描述

结果存放在制定文件目录下,格式也为命令语句指定的:

在这里插入图片描述

检测结果内容:

在这里插入图片描述

4、Java API的方式 *


官方文档

需要先引入maven依赖

项目结构

在这里插入图片描述

测试代码

Test01:

package com.keafmd.test01;

/**

  • Keafmd

  • @ClassName: Test01

  • @Description: 测试1

  • @author: 牛哄哄的柯南

  • @Date: 2021-03-15 15:29

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class Test01 {

public static void main(String[] args) {

int a =100;

int b=29;

String s =“abc”;

System.out.println(“hello!”);

}

}

Test02:

package com.keafmd.test02;

/**

  • Keafmd

  • @ClassName: Test02

  • @Description:

  • @author: 牛哄哄的柯南

  • @Date: 2021-03-15 15:30

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class Test02 {

public static void main(String[] args) {

boolean flag=true;

while(flag){

flag=false;

}

System.out.println(“123”);

int a =100;

int b=29;

String s =“abc”;

System.out.println(“hello!”);

}

}

pmdArgs方式

**命令行接口的方式

最简单的方法是使用与命令行相同的接口调用PMD**

Example :

package com.keafmd;

import net.sourceforge.pmd.PMD;

/**

  • Keafmd

  • @ClassName: Example

  • @Description:

  • @author: 牛哄哄的柯南

  • @Date: 2021-03-15 15:51

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class Example {

public static void main(String[] args) {

String[] pmdArgs = {

“-d”, “D:/javaworkspace/pdm-test02/src”,

“-R”, “rulesets/java/quickstart.xml”,

“-f”, “xml”,

“-r”, “D:/pmdreport/pmd-report.xml”

};

PMD.main(pmdArgs);

}

}

PMDConfiguration方式

PmdExample:

package com.keafmd;

import net.sourceforge.pmd.PMD;

import net.sourceforge.pmd.PMDConfiguration;

/**

  • Keafmd

  • @ClassName: PmdExample

  • @Description:

  • @author: 牛哄哄的柯南

  • @Date: 2021-03-15 15:57

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class PmdExample {

public static void main(String[] args) {

/*String fileName ;

// 重新生成文件名(根据具体情况生成对应文件名)

fileName = UUID.randomUUID()+“_”+“pmd-report.html”;

PMDConfiguration configuration = new PMDConfiguration();

configuration.setInputPaths(“D:/file”);

configuration.setRuleSets(“rulesets/java/quickstart.xml”);

configuration.setReportFormat(“html”);

configuration.setReportFile(“D:/pmdreport/”+fileName);

PMD.doPMD(configuration);*/

PMDConfiguration configuration = new PMDConfiguration();

configuration.setInputPaths(“D:/javaworkspace/pdm-test/src”);

configuration.setRuleSets(“rulesets/java/quickstart.xml”);

configuration.setReportFormat(“html”);

configuration.setReportFile(“D:/pmdreport/pmd-report.html”);

PMD.doPMD(configuration);

}

}

Programmatically(拓展)

这使您能够更好地控制处理哪些文件,但也会更加复杂。您还可以提供自己的侦听器和呈现器。

1. 首先,我们创建一个PMDConfiguration。目前,这是指定规则集的唯一方法:

PMDConfiguration configuration = new PMDConfiguration();

configuration.setMinimumPriority(RulePriority.MEDIUM);

configuration.setRuleSets(“rulesets/java/quickstart.xml”);

2. 为了支持类型解析,PMD还需要访问已编译的类和依赖项。这被称为“生长素路径”,并且在这里也进行了配置。注意:您可以指定由:关于Unix系统或;在Windows下。

configuration.prependClasspath(“/home/workspace/target/classes:/home/.m2/repository/my/dependency.jar”);

3. 那我们需要一个规则工厂。这是使用配置创建的,同时考虑到最低优先级:

RuleSetFactory ruleSetFactory = RulesetsFactoryUtils.createFactory(configuration);

4. PMD操作于DataSource。您可以收集自己的列表FileDataSource.

List files = Arrays.asList(new FileDataSource(new File(“/path/to/src/MyClass.java”)));

5. 对于报告,您可以使用内置渲染器。XMLRenderer。注意,必须通过设置适当的Writer打电话start()。在pmd运行之后,您需要调用end()flush()。那么你的作者应该收到所有的输出。

StringWriter rendererOutput = new StringWriter();

Renderer xmlRenderer = new XMLRenderer(“UTF-8”);

xmlRenderer.setWriter(rendererOutput);

xmlRenderer.start();

6. 创建一个RuleContext。这是上下文实例,在规则实现中是可用的。注意:当在多线程模式下运行时(这是默认的),规则上下文实例将被克隆到每个线程。

RuleContext ctx = new RuleContext();

7. 可以选择注册报表侦听器。这样你就可以对发现的违规行为立即做出反应。您也可以使用这样的侦听器来实现您自己的呈现器。侦听器必须实现接口。ThreadSafeReportListener并且可以通过ctx.getReport().addListener(...).

ctx.getReport().addListener(new ThreadSafeReportListener() {

public void ruleViolationAdded(RuleViolation ruleViolation) {

}

public void metricAdded(Metric metric) {

}

8. 现在,所有的准备工作都完成了,PMD可以执行了。这是通过调用PMD.processFiles(...)。此方法调用接受配置、规则集工厂、要处理的文件、规则上下文和呈现器列表。如果不想使用任何渲染器,请提供一个空列表。注意:需要显式关闭辅助路径。否则,类或JAR文件可能会保持打开状态,并且文件资源会泄漏。

try {

PMD.processFiles(configuration, ruleSetFactory, files, ctx,

Collections.singletonList(renderer));

} finally {

ClassLoader auxiliaryClassLoader = configuration.getClassLoader();

if (auxiliaryClassLoader instanceof ClasspathClassLoader) {

((ClasspathClassLoader) auxiliaryClassLoader).close();

}

}

9. 呼叫后,您需要完成渲染器end()flush()。然后,您可以检查呈现的输出。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

5)]
[外链图片转存中…(img-ieIZVoTE-1711951434695)]
[外链图片转存中…(img-BL3PkAOL-1711951434695)]
[外链图片转存中…(img-uzRaSuwm-1711951434696)]
[外链图片转存中…(img-IftKRaSl-1711951434696)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-18ohPPw9-1711951434696)]

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

[外链图片转存中…(img-rMDfnXqt-1711951434697)]

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值