标签: pmd

PMD和FindBugs有什么区别?

有一个问题比较PMD和CheckStyle.但是,我找不到PMD和FindBugs之间差异/相似性的细分.我认为一个关键的区别是PMD适用于源代码,而FindBugs适用于编译的字节码文件.但就能力而言,它应该是一种选择还是选择,还是相互补充?

java static-analysis findbugs pmd

104
推荐指数
2
解决办法
4万
查看次数

是否为Checkstyle,PMD,FindBugs更换SonarQube?

我们正在从头开始研究一个Web项目,并且正在研究以下静态代码分析工具.

  • 约定(Checkstyle)
  • 不良做法(PMD)
  • 潜在的错误(FindBugs)

该项目建立在Maven之上.我没有使用多种工具来实现这一目的,而是在寻找一个灵活的解决方案并且遇到了SonarQube.

我们是否可以通过SonarQube实现Checkstyle,PMD和Findbugs的结果?

findbugs checkstyle pmd sonarqube

101
推荐指数
6
解决办法
6万
查看次数

Checkstyle与PMD

我们将静态分析工具引入到我们的Java产品的构建系统中.我们正在使用Maven2,因此CheckstylePMD集成是免费的.然而,就强制执行基本样式规则而言,这两个工具之间的功能似乎存在很大的重叠.

利用这两者有益处吗?我不想维护2个工具,如果一个工作.如果我们选择一个,我们应该使用哪一个?为什么?

我们还计划使用FindBugs.我们应该看看其他静态分析工具吗?

更新:共识似乎是PMD比CheckStyle更受欢迎.我没有看到使用两者的充分理由,我不想维护2套规则文件,因此我们可能会专门针对PMD.我们还将引入FindBugs,也许最终,Macker将实施架构规则.

java static-analysis findbugs checkstyle pmd

83
推荐指数
9
解决办法
6万
查看次数

RegExp匹配字符串不以my开头

对于PMD,我想有一个规则,警告我那些从我的开始的丑陋变量.这意味着我必须接受所有不以我的方式开头的变量.

所以,我需要一个RegEx(re),其行为如下:

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的(稍后会在这里列出,抱歉,现在无法访问它们),但尚未使用它.

regex pmd regex-negation

76
推荐指数
4
解决办法
17万
查看次数

避免使用printStackTrace(); 请使用记录器调用

在我的应用程序中,我通过PMD运行我的代码.它向我显示了这条消息:

  • 避免使用printStackTrace(); 请使用记录器调用.

那是什么意思?

java logging pmd printstacktrace

67
推荐指数
4
解决办法
8万
查看次数

无法找到要链接到的源XRef

我有一个使用pmd插件进行代码质量检查的大型maven项目.

自从我开始使用pmd插件后,我收到以下警告消息:

[WARNING] Unable to locate Source XRef to link to - DISABLED
Run Code Online (Sandbox Code Playgroud)

我用Google搜索,发现我需要实现jxr插件.

所以我将以下内容添加到主pom.xml文件中的build属性中.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jxr-plugin</artifactId>
    <version>2.3</version>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

它真的没有改变任何东西.

我需要实现什么才能解决此警告消息?

输出 mvn -version

Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
Maven home: /usr/share/maven-bin-3.0
Java version: 1.7.0_05, vendor: Oracle Corporation
Java home: /usr/lib64/icedtea7/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.5.2-gentoo", arch: "amd64", family: "unix"
Run Code Online (Sandbox Code Playgroud)

谢谢!

java pmd maven-3 maven

58
推荐指数
2
解决办法
3万
查看次数

不支持的@SuppressWarnings("PMD.DoNotCallSystemExit")

我需要System.exit(0)在应用程序中使用.Eclipse安装了PMD插件并抱怨这行代码.添加@SuppressWarnings ("PMD.DoNotCallSystemExit")删除该警告,但现在我得到一个警告,这SuppressWarnings是不受支持的,尽管它的工作原理.

有办法解决这个问题吗?

eclipse pmd suppress-warnings

47
推荐指数
1
解决办法
1万
查看次数

Logger与System.out.println

我正在使用PMD插件进行eclipse,在使用System.out.println()解释时它给出了一个错误:

系统.(out | err).print使用,考虑使用记录器.

我的问题是 - 什么是记录器?它是如何用于打印到屏幕的?为什么更好?

java eclipse pmd java.util.logging

41
推荐指数
5
解决办法
7万
查看次数

逐行迭代文本文件的内容 - 是否有最佳实践?(与PMD的AssignmentInOperand相比)

我们有一个Java应用程序,它有一些知道读取文本文件的模块.他们非常简单地使用这样的代码:

BufferedReader br = new BufferedReader(new FileReader(file));  
String line = null;  
while ((line = br.readLine()) != null)  
{  
   ... // do stuff to file here  
} 
Run Code Online (Sandbox Code Playgroud)

我在我的项目上运行PMD并在线路上获得了" AssignmentInOperand "违规while (...).

除了显而易见的事情之外,是否有更简单的方法来执行此循环:

String line = br.readLine();  
while (line != null)  
{  
   ... // do stuff to file here  
   line = br.readLine();  
} 
Run Code Online (Sandbox Code Playgroud)

这被认为是更好的做法吗?(虽然我们"复制" line = br.readLine()代码?)

java pmd while-loop

38
推荐指数
4
解决办法
8万
查看次数

这些PMD规则的原因是什么?

DataflowAnomalyAnalysis:找到变量'变量'的'DD'异常(行'n1' - 'n2').

DataflowAnomalyAnalysis:找到变量'变量'的'DU'-anomaly(行'n1' - 'n2').

DD和DU听起来很熟悉......我想说的是关于最弱前后条件的测试和分析,但我不记得具体细节.

NullAssignment:将Object指定为null是代码气味.考虑重构.

null如果对象是本地对象(在方法之外没有使用),是不是设置一个对象来协助垃圾收集?或者这是一个神话?

MethodArgumentCouldBeFinal:参数'param'未分配,可以声明为final

LocalVariableCouldBeFinal:局部变量'variable'可以声明为final

使用final参数和变量有什么好处吗?

LooseCoupling:避免使用'LinkedList'之类的实现类型; 改为使用界面

如果我知道我特别需要一个LinkedList,为什么我不会用一个来明确表达未来开发人员的意图?返回有意义的类路径中最高的类是一回事,但为什么我不会声明我的变量是最严格的呢?

AvoidSynchronizedAtMethodLevel:使用块级别而不是方法级别同步

块级同步与方法级同步相比有哪些优势?

AvoidUsingShortType:不要使用短类型

我的第一语言是C和C++,但在Java世界中,为什么我不能使用最能描述我数据的类型呢?

java pmd

34
推荐指数
1
解决办法
3万
查看次数