我想在现有项目上启动findBug(在命令行上,目前有522个Bug)。
如果发现的错误超过522个,我如何在ant文件(在findbugs目标下)中设置使构建失败的选项?
我想让ant构建失败,而不是从输出报告中手动理解它。
谢谢。
这可能是不可能的。您可以使用数据挖掘任务并进行一些特殊处理。http://findbugs.sourceforge.net/manual/datamining.html
这可能有点太过分了,但我还是把它作为一个答案来添加。
你可以用声纳。Sonar是一个测量和跟踪代码质量的免费平台。它包含了findbugs指标。
它有一个Build Breaker插件,它会在某些条件下破坏你的构建。
您需要编写一个自定义ant任务,该任务派生自ant的Task
基类,该基类添加了一个日志侦听器,该侦听器设置了一个属性,然后将其自身删除。自定义任务将获取当前Project
,并通过addLogListener(…)添加日志侦听器
日志侦听器需要确定findBugs何时进行日志记录,辨别哪个日志消息列出了Bug的数量,解析该行,设置属性并将其从日志侦听器集中删除。
完成该任务后,还需要编写一个新条件,因为Ant没有附带数字比较条件。然后,您可以在失败任务中使用自定义条件,就像任何其他条件一样。
<findBugCountListener prefix="findbugs.count"/>
<findBugs ...>
</findBugs>
<fail>
<condition property="allupper">
<and>
<isset property="findbugs.count"/>
<greaterThan value="${findbugs.count}" limit="522"/>
</and>
</condition>
</fail>
理想情况下,您的监听器将设置一个Ant属性,其中包含bug的数量。然后,如果bug数量太多,可以使用AntContrib的Assert任务抛出构建异常。
是的,这比简单地配置几个标签更需要手动操作,但至少Ant可以实现这一点,因为它能够加载自定义扩展。这不像Ant是在明确了解findBugs插件的情况下编写的(当然必须在之后编写)。
另一种选择是找到findBugs ANT插件的源代码,并假设它有允许合法修改的许可证,将ANT插件修改为具有新的"附加"属性setCount="propName"
,然后在现有的findBugs ANT插件中捕获并设置该属性。
这是一个很老的问题,但这可能对其他人有用:有一种非常简单的方法可以实现所需的行为,方法是设置findbugs
任务的warningsProperty
属性,然后让fail
检查属性的值:
<findbugs ... warningsProperty="findbugs.warnings">
...
</findbugs>
<fail>
<condition><istrue value="${findbugs.warnings}"/></condition>
</fail>
(不用说,findbugs现在已经被放弃了,但有spottbugs作为继任者。)