什么是PMD,FindBugs?

在Eclipse中配置checkstyle、pmd、findbugs、visualvm 1 在Eclipse中配置代码审查与分析工具 1.1 Checkstyle 点击eclipse窗口上方的windows,选择install new software,在新弹出的work with栏输入checkstyle的地址:http://eclipse-cs.sf.net/update,在name栏经pending后选中出现的两个要安装的选项,一路点击next即可,如下图:     阅读详情

说明:本文为了练习英语,有英文说明和中文翻译。想直接看中文,快速翻一页即可。

什么是PMD?

PMD is an open source static source code analyzer that reports on issues found within application code. PMD includes built-in rule sets and supports the ability to write custom rules. PMD does not report compilation errors, as it only can process well-formed source files. Issues reported by PMD are rather inefficient code, or bad programming habits, which can reduce the performance and maintainability of the program if they accumulate. It can analyze files written in Java, JavaScript, Apex and Visualforce, PLSQL, Apache Velocity, XML, and XSL.
While PMD does not officially stand for anything, it has several unofficial names, the most appropriate probably being Programming Mistake Detector.

PMD是一款静态代码分析器,可以报告程序代码的问题。PMD包含内建的规则和支持自定义规则。PMD不支持报告编译错误,因此可以很好的处理源代码文件。PMD报告的问题都是一些低效率代码,或坏的编程习惯,可能导致性能或者维护困难的代码。它可以处理Java,JavaScript,Apex,Visualforece,PLSQL,Apache ,和SQL文件。但是PMD并没有官方的名字,有一些非官方称呼,最著名的莫过于:Programming Mistake Detector.

参考:PMD wiki

什么是FindBugs?

FindBugs is an open-source static code analyser created by Bill Pugh and David Hovemeyer which detects possible bugs in Java programs. Potential errors are classified in four ranks: (i) scariest, (ii) scary, (iii) troubling and (iv) of concern. This is a hint to the developer about their possible impact or severity. FindBugs operates on Java bytecode, rather than source code. The software is distributed as a stand-alone GUIapplication. There are also plug-ins available for Eclipse, NetBeans, IntelliJIDEA, Gradle, Hudson,Maven, Bamboo and Jenkins.
Additional rule sets can be plugged in FindBugs to increase the set of checks performed.
A successor to FindBugs, called SpotBugs, has been created.

FindBugs 是一款静态代码检查器,由 Bill Pugh 和 David Hovemeyer 创建的,它可以检查java代码可能出现的bug,潜在错误分为4个等级:

  • (i) 可怕的(scariest)
  • (ii) 吓人的(scary)
  • (iii) 问题(troubling)
  • (iv) of 令人担心(concern)

这是隐藏在开发中的隐患,FindBugs操作针对的是Java字节码,比源码更深入。它有GUI版本。Eclipse, NetBeans, IntelliJIDEA, Gradle, Hudson,Maven, Bamboo and Jenkins有对应插件。FindBugs中也有一系列的规则。

FindBugs,有一款继任者–SpotBugs。

参考:Find Bugs Wiki

补充一个Android插件,集成了Lint、KtLint、UnitTest、Checkstyle、Findbugs、Pmd.

Checkstyle, FindBugs, PMD, VisualVM四种代码检测工具的比较与相关心得 l  CheckStyle专注于格式方面的规范,如行内不能有tab符、‘{’前要有空格等。这些要求往往很少和代码逻辑相关,而是更加关心程序员的编码风格和编码习惯,他要求程序员要写出不仅好用,而且好看、好读的代码。由于不同公司,或者说不同标准,对于一个优秀的代码风格拥有不一样的要求,所以不同的配置文件对CheckStyle检测出来的错误影响极大。我们在运用CheckStyle中的谷歌标准检查代码时, 阅读详情

相关推荐

集成静态代码分析器到Android项目中:FindBugs、PMD与Checkstyle实践指南

本文还有配套的精品资源,点击获取 简介:Android开发中维护代码质量至关重要,不仅能增强软件稳定性还能提升开发效率。本文将深入讨论如何通过Gradle自动化集成三个流行静态代码分析工具:FindBugs、PMD和Checkstyle,来优化代码质量管理。文章提供了具体的配置示例和自动化脚本,帮助开发者及时发现和修复代码问题。 1. Android项目中静态代码...

weixin_35728286的博客 1425

自己收集的一些Checkstyle/PMD/Findbugs编码规范

自己收集的一些Checkstyle/PMD/Findbugs编码规范,或许对大家有点用 :evil: 1、 检查使用*号的导入,默认为全部类。 2、 检查多余的导入,如一个类导入了多次。 3、 检查没有使用的导入。 4、 检查是否有非法的包,缺省检查sun.*;对于某些包是不建议直接调用的。 5、 不需要在相同包中导入一个类。 6、 文件的最大行数,缺省为1500。 7、...

iteye_17386的博客 270

全面提升代码质量:PMD、FindBugs与CheckStyle的实践指南

PMD是一个静态代码分析工具,主要用于查找Java代码中的潜在问题,包括未使用的代码、复杂表达式中的问题、可能的错误、重复代码以及潜在的性能问题。PMD通过内置的一系列规则集来检测代码中的问题,这些规则集覆盖了空的catch块、未使用的局部变量、过长的方法以及可能的空指针异常等场景。PMD可以应用于多个场景,从单个开发者的代码审查到大型团队的集成构建过程。开发者可以利用PMD来提高代码质量,避免常见的编程错误,而团队则可以将PMD集成到持续集成系统中,作为自动化质量控制流程的一部分。

weixin_42361478的博客 976

IDEA插件之代码质量检查利器 - Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint

随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,从而降低错误风险。工欲善其事,必先利其器,这篇文章给大家介绍几种检查代码质量的利器:Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint...

张维鹏的博客 1万+

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 711

做蛋白组学数据分析,竟然还不会使用DIA-NN软件,走过路过不要错过,进来免费学习!!!

蛋白组学分析工具DIA-NN使用

wcy1995427的博客 9871

maven代码规范检查(checkstyle、findbugs、pmd)

很多时候我们的代码写的不规范,比如没缩进、参数间没空格、导入的包没用到没删除、方法很长没有进行拆分、 直接对方法参数进行了赋值分配等等不规范的操作或写法。为了规范代码并提高代码的质量,以及扫描代码检测潜在的不合理代码,我们可以使用一些插件来进行代码扫描分析。maven-checkstyle-plugin 是 maven 提供的一个插件,用于扫描代码检测不合理需要改进的差代码,简单来说就是代码规范检查。举个例子:GitHub 就用它在提交和拉取请求时审核代码库的一致性(例如缩进规则等)。

qq_20236937的博客 6419

Ubuntu 22.04蓝牙开关秒关?别慌,可能是这个Intel固件文件在搞鬼

本文深入解析Ubuntu 22.04蓝牙开关秒关问题,指出Intel固件文件缺失是常见原因,并提供详细修复方案。通过确认硬件型号、检查固件文件及智能替代方案,帮助用户快速解决蓝牙故障,提升系统稳定性。

weixin_30247307的博客 757

FindBugs、PMD和CheckStyle对比

FindBugs、PMD和CheckStyle对比 1.     概要   工具 目的 检查项 FindBugs 检查.class 基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug 主要检查bytecode中的bug patterns,如NullPoint空指针检查、没有合理关闭...

个人博客 517

4D毫米波雷达:高度信息与微多普勒效应

4D毫米波雷达:高度信息与微多普勒效应​ ,人工智能,计算机视觉,大模型,AI,本文深入解析4D毫米波雷达的高度信息获取与微多普勒效应。4D毫米波雷达通过MIMO技术、垂直天线布局及相位差计算等获取高度信息,相较传统雷达更精准。微多普勒效应由目标微运动引发,可用于目标识别、分类和运动监测。文中结合自动驾驶、安防监控案例,分析技术挑战与未来趋势,如信号干扰、数据处理复杂,未来将向高精度、与其他传感器融合发展,展现出在多领域的巨大应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

Python全栈入门到实战【基础篇 22】生成器与迭代器:底层逻辑与实战场景

Python迭代器与生成器:惰性求值的高效实践 摘要:本文深入解析Python中迭代器和生成器的核心机制与应用场景。迭代器通过实现__iter__()和__next__()方法实现惰性求值,适合处理大数据集和无限序列。生成器作为迭代器的简化实现,通过yield关键字自动实现迭代器协议,代码更简洁。文章详细对比了可迭代对象与迭代器的区别,演示了自定义迭代器和生成器函数的实现方式,并介绍了生成器表达式这一高效替代列表推导式的方案。通过斐波那契数列等实例,展示了惰性求值在内存优化方面的优势,以及生成器在流式数据处

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3263

Findbugs、checkStyle、PMD常见错误总结

title: Findbugs、checkStyle、PMD常见错误总结 date: 2019-05-12 10:46:01 个人博客:asuna.wang 记录的是在软件工程基础实验中使用到的代码审计工具(基于Eclipse)的一些能够审计到的错误类型,大部分来源于网络,在这里归纳,方便以后查看。这里用到的工具主要是checkstyle、findbugs、PMD,同时在实践中实际使用工具进...

苏柳欣的博客 4504

AI自动化流程在金融风控中的3个典型案例

AI自动化风控流程全流程自动化:最小化人工干预,实现从数据输入到决策输出的闭环自适应学习:通过持续数据反馈实现模型自动迭代优化实时决策能力:满足毫秒级(支付风控)至分钟级(信贷审批)的响应需求多模态数据融合:整合结构化、非结构化和实时流数据智能决策解释:自动生成符合监管要求的决策解释人机协同机制:在高风险场景下实现AI与人类专家的协同决策实施后关键绩效指标(KPI)变化指标实施前实施后改进幅度平均审批时间3.2天4.7分钟-99.7%自动审批率15%85%+467%

架构师的AI之路,分享AI应用开发架构的学习与实践。 1535

Checkstyle, PMD, Findbugs对比

http://blog.csdn.net/terryzero/article/details/5513950 当人们谈及代码规则引擎时。每个人都喜欢站在自己的位置上说自己较为喜欢的工具,而排斥其他的工具。  For instance, a PMD supporte

sony315的专栏 702

计算机视觉安防监控升级:人脸识别与行为异常检测

计算机视觉安防监控升级:人脸识别与行为异常检测 ,人工智能,计算机视觉,大模型,AI,本文将深入探讨人脸识别与行为异常检测技术在安防监控中的应用,包括技术原理、算法实现、应用场景以及面临的挑战与解决方案。通过实际案例和代码示例,帮助读者更好地理解和掌握这些技术,为推动安防监控系统的智能化升级提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 23万+

渗透测试之哥斯拉实战

可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。

大河之犬的博客 2488

FindBugs PMD 和CheckStyle对比

FindBugs PMD 和CheckStyle对比概要 工具 目的 检查项目 FindBugs检查.class 基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug 主要检查bytecode中的bug patterns,如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等 PMD检查源

冰叶纷飞的博客 899

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android代码质量检测终极指南:FindBugs与PMD实战教程

在Android应用开发过程中,代码质量检测是确保应用稳定性和可维护性的关键环节。FindBugs和PMD作为两款强大的静态代码分析工具,能够帮助开发者发现潜在缺陷,提升代码质量。本文将详细介绍如何使用这两款工具进行Android代码质量检测,让你轻松打造高质量应用。🚀 ## 什么是代码质量检测? 代码质量检测是通过静态分析技术,在不运行程序的情况下检查源代码,发现潜在的错误、代码异味和不规

gitblog_01009的博客 357

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

eclipse安装checkstyle、PMD、FindBugs、VisualVM

1.前言  Eclipse 安装插件一般都两种方式,一种是自动傻瓜式安装,仅需输入安装网址,即可自动安装;另外一种是下载对应压缩包,拷贝里面的两个文件夹plugins和 features下面的文件分别到eclipse目录下面对应的plugins和features目录。然后重启eclipse,即可使用,本教程主要介绍傻瓜式安装方式。2.安装checkstyleEclipse中,选择Help->Inst

wbcg111的专栏 3880

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA中FindBugs,PMD和CheckStyle的安装和使用

一.FindBugs 1.idea安装FindBugs插件 推荐使用在线安装方式,在Plugins-&gt;Marketplace中搜索插件即可直接安装,但是在未配置代理服务器的情况下,在线安装可能会出现故障,故以下演示离线安装方法。 1)进入https://plugins.jetbrains.com/,搜索findbugs插件,选择合适的版本并下载,如下图: 2)依次点击File-&gt;S...

u012093933的博客 3866

Jenkins中使用checkstyle, coverage, pmd, findbugs plugin

1. 安装启动Jenkins之后,在manage jenkins里,选择manage plugin,在available tab里面安装相关plugins FindBugs Plug-in This plug-in collects the FindBugs analysis results of the project modules and visualizes the found war

cloud的技术积累 8313

java pmd checkstyle_提高代码质量 CheckStyle FindBugs PMD

注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述逻辑和顺序,同时也加了一些自己的补充。在这片文章中,我将从工具使用的角度上讲述如何提高 Android 代码质量,这些自动化工具包括 Checksytle、Findbugs、PMD 和 Android Lint. 团队中代...

weixin_35676939的博客 481

eclipse插件之Findbugs、Checkstyle、PMD安装及使用

eclipse插件之Findbugs、Checkstyle、PMD安装及使用 一、什么是Findbugs、checkstyle、PMD Findbugs、checkstyle和PMD都可以作为插件插入eclipse,当然也有单独的工具可以实现他们的功能,比如Findbugs Tool就可以不必插入eclipse就可以使用。 三者的功能如下表: 工具 ...

WGH100817的博客 338
上一篇: 【算法面试】一道反转链表算法题
下一篇: 【debug】getAnnotation(Class.class) 为空问题
toom_dp2px
博客等级 码龄18年 69粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值