在Java中,这是一个名为FindBugs的好工具..Net中有类似的东西吗?
将findbugs插件添加到maven 很容易,这样就可以运行了
mvn site
Run Code Online (Sandbox Code Playgroud)
但是,我希望它能随时运行
mvn install
Run Code Online (Sandbox Code Playgroud)
就像单元测试一样.也就是说,如果findbugs发现任何错误,我不希望安装成功.我有办法做到这一点吗?
我针对我的所有代码运行findbugs,只解决了最重要的问题.我终于解决了最重要的问题,现在我正在查看细节.我有一个简单的实体,比如一个用户:
public class User implements Serializable
{
protected Date birthDate;
public Date getBirthDate()
{return(birthDate);}
public void setBirthDate(final Date birthDate)
{this.birthDate = birthDate;}
}
Run Code Online (Sandbox Code Playgroud)
这个课程是不完整的,所以不要因为它错过了它serialVersionUID
和其他标准的东西,我只关心birthDate
安全漏洞.
现在,根据findbugs报告,由于我返回对可变对象的引用,这是一个潜在的安全风险.但在实践中,这究竟有多重要?
http://findbugs.sourceforge.net/bugDescriptions.html#EI_EXPOSE_REP
我想在这种情况下我仍然没有真正看到问题所在.我应该通过long
并设置日期吗?
沃尔特
我想使用具有以下依赖项的库:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>annotations</artifactId>
<version>2.0.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我读到FindBugs用于Java代码的静态分析,所以我虽然没有必要包含在应用程序中.<scope>provided</scope>
用一个或用一个<exclusion>...</exclusion>
?排除罐子是否安全?
排除它的一个原因是存在针对(L)GPL许可的公司政策.
我需要为我的findbugs ant脚本设置一个过滤器文件,它只扫描src/*文件,而不扫描test/*文件.
检查所有类的语法是什么,而忽略名称中带有'test'的任何文件名或包名?
我有以下的(篡改)类我正在和系统FindBugs的是产生SE_BAD_FIELD警告,我试图了解为什么它会说,之前,我解决它在我以为我会的方式.我感到困惑的原因是因为描述似乎表明我在类中没有使用其他非可序列化的实例字段,但bar.model.Foo也不是可序列化的并且以完全相同的方式使用(就我而言)可以告诉)但Findbugs没有发出任何警告.
import bar.model.Foo;
import java.io.File;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Demo implements Serializable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final File file;
private final List<Foo> originalFoos;
private Integer count;
private int primitive = 0;
public Demo() {
for (Foo foo : originalFoos) {
this.logger.debug(...);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
我最初对解决方案的羞耻是在我使用时从工厂获得记录器参考:
public DispositionFile() {
Logger logger = LoggerFactory.getLogger(this.getClass());
for (Foo foo : originalFoos) {
this.logger.debug(...);
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并不特别有效.
思考?
最近我正在寻找最好的代码检查工具集.我的IDE是Intellij 15.0,我知道那里有很好的检查功能,但是当我查看互联网时,我没有找到Intellij内置检查代码和那三个之间的良好比较.试过它们的人是否可以提供一些最佳实践?Intellij是否涵盖所有这些?
我知道findbugs以二进制级别运行但仍然让它保持比较.
Findbugs报道:
findbugs:
[findbugs] Executing findbugs from ant task
[findbugs] Running FindBugs...
[findbugs] The following classes needed for analysis were missing:
[findbugs] com.company.OptionalClass
[findbugs] Warnings generated: 11
[findbugs] Missing classes: 2
[findbugs] Calculating exit code...
[findbugs] Setting 'missing class' flag (2)
[findbugs] Setting 'bugs found' flag (1)
[findbugs] Exit code set to: 3
[findbugs] Java Result: 3
[findbugs] Classes needed for analysis were missing
[findbugs] Output saved to findbugs.xml
BUILD SUCCESSFUL
Run Code Online (Sandbox Code Playgroud)
这个OptionalClass是从第三方jar引用的,我没有源代码,我不想进行findbugs分析.它指的是我在类路径中或其他任何地方没有的类.在某些情况下,当我们的第三方jar以某种方式配置时,可能会使用此类.
有没有办法告诉findbugs忽略这个类?
请注意,它会完成分析并生成findbugs.xml
报告,因此这是一个小问题.
我正在使用声纳,我已经得到了这种违反我的代码的和平:
Correctness - Possible null pointer dereference
Run Code Online (Sandbox Code Playgroud)
在findbugs有没有人知道这个规则?我搜索了很多,但是我找不到描述这条规则的好的示例代码(用Java),遗憾的是findbugs网站没有关于这条规则的任何示例代码或良好的描述.
为什么会出现此违规行为?
我有一个由FindBugs报告的错误,但我知道更好:)请参阅以下示例:
public class MyClass extends BaseClass {
@CustomInjection
private Object someField;
public MyClass() {
super();
someField.someMethod(); // Bug is here because FindsBugs thinks this is always null
}
}
Run Code Online (Sandbox Code Playgroud)
在我的BaseClass构造函数中,我使用正确的对象注入带有@CustomInjection批注的所有字段,因此我的注释字段在我的情况下不为空.
我不想用'suppresswarnings'来抑制警告,因为这会使代码混乱很多.我宁愿做像FindBugs这样一个过滤器解释在这里,但我无法弄清楚如何筛选具有一定的界面注释字段错误.我也不想过滤所有空错误警告.我认为应该是这样的:
<Match>
<Bug code="UR">
<Field annotation="CustomInjection">
</Match>
Run Code Online (Sandbox Code Playgroud)