有一个问题比较PMD和CheckStyle.但是,我找不到PMD和FindBugs之间差异/相似性的细分.我认为一个关键的区别是PMD适用于源代码,而FindBugs适用于编译的字节码文件.但就能力而言,它应该是一种选择还是选择,还是相互补充?
我们正在从头开始研究一个Web项目,并且正在研究以下静态代码分析工具.
该项目建立在Maven之上.我没有使用多种工具来实现这一目的,而是在寻找一个灵活的解决方案并且遇到了SonarQube.
我们是否可以通过SonarQube实现Checkstyle,PMD和Findbugs的结果?
我们将静态分析工具引入到我们的Java产品的构建系统中.我们正在使用Maven2,因此Checkstyle和PMD集成是免费的.然而,就强制执行基本样式规则而言,这两个工具之间的功能似乎存在很大的重叠.
利用这两者有益处吗?我不想维护2个工具,如果一个工作.如果我们选择一个,我们应该使用哪一个?为什么?
我们还计划使用FindBugs.我们应该看看其他静态分析工具吗?
更新:共识似乎是PMD比CheckStyle更受欢迎.我没有看到使用两者的充分理由,我不想维护2套规则文件,因此我们可能会专门针对PMD.我们还将引入FindBugs,也许最终,Macker将实施架构规则.
对于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)
我尝试了不同的(稍后会在这里列出,抱歉,现在无法访问它们),但尚未使用它.
在我的应用程序中,我通过PMD运行我的代码.它向我显示了这条消息:
- 避免使用printStackTrace(); 请使用记录器调用.
那是什么意思?
我有一个使用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)
谢谢!
我需要System.exit(0)
在应用程序中使用.Eclipse安装了PMD插件并抱怨这行代码.添加@SuppressWarnings ("PMD.DoNotCallSystemExit")
删除该警告,但现在我得到一个警告,这SuppressWarnings
是不受支持的,尽管它的工作原理.
有办法解决这个问题吗?
我正在使用PMD插件进行eclipse,在使用System.out.println()
解释时它给出了一个错误:
系统.(out | err).print使用,考虑使用记录器.
我的问题是 - 什么是记录器?它是如何用于打印到屏幕的?为什么更好?
我们有一个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()
代码?)
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世界中,为什么我不能使用最能描述我数据的类型呢?