[findbugs就是这里的例子,问题适用于任何这样的maven插件]
我不久前参加了一个构建讲座,并且我非常喜欢的模式是:当向链中添加新工具并且从n个违规开始时,你应该保持n减少(高水位线)仅当当前检查超过n的最后一个值时才会使构建失败。
刚刚在我们的构建中引入了findbugs,我们正在寻找实现这种模式的方法。我们无法通过插件配置看到任何方法,所以很奇怪,如果有人可以提到他们是如何实现这一点。我想显而易见的方法是自定义插件,但在我们提前充电之前,想听别人的想法。
答案 0 :(得分:2)
Findbugs(以及我所知道的所有其他代码指标插件)生成an XML file。我要做的是编写一个专门读取这些xml文件的maven插件。它会在某个地方保留一个私有查找表,每个构建存储一个,每个度量标准的最后值。
它将使用您必须为每个指标插件实现的通用解析器接口。配置将是这样的:
<plugin>
<groupId>com.yourcompany</groupId>
<artifactId>your-plugin-id</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>readmetrics</id>
<phase>process-classes</phase>
<goals>
<goal>analyse-metrics</goal>
</goals>
</execution>
</executions>
<configuration>
<metrics>
<metric>
<type>findbugs</type>
<file>${project.reporting.outputDirectory}/findbugs/output.xml</file>
</metric>
<metric>
<type>checkstyle</type>
<file>${project.reporting.outputDirectory}/checkstyle/output.xml</file>
</metric>
<metric>
<type>pmd</type>
<file>${project.reporting.outputDirectory}/pmd/output.xml</file>
</metric>
</metrics>
</configuration>
</plugin>
答案 1 :(得分:2)
在我看来,FindBugs的情况有点特别:违规不仅仅是装饰性的,它们可能是真正的错误,因此应该被修复,至少是高优先级错误(即使用High
阈值时)。
以防万一,我们遵循类似的模式(我们对完成的定义包括没有技术债务增加)但我们没有在Maven中实现它(我们不会使构建失败) 。我们使用Sonar及其time machine来跟踪指标演变(我们跟踪每日演变)。它对我们来说效果很好,即使它没有失败那么强大。
答案 2 :(得分:1)
我在maven findbugs跟踪器中提出了这个问题(参见http://jira.codehaus.org/browse/MFINDBUGS-115)。
此外,作为提出此事项的一部分,我编写了一份提交的补丁。我们在大型多模块项目中成功运行此补丁。
您可以按照findbugs-maven-plugin网站上的说明同步代码并应用修补程序,或者希望修补程序或其派生可能会被接受到该插件的某些未来版本中。
答案 3 :(得分:0)
有趣的是你提到这一点,因为我现在正在为我的雇主做这件事。我们已经剥离了一个开源项目来进行这项工作,名为dybdob;因为非常正在进行的工作,现在回购中的代码相当可怕且非常硬编码/ hacky。然而,计划是做出或多或少与seanizer建议的完全相同:解析XML,保持计数,如果增加则失败。
我实现的第一件事(再次:硬编码,黑客和未记录)是一个插件,用于实际计算来自构建的javac编译器警告,并在该数量增加时中断构建。现在正在运行,我正在同时处理findbugs,checkstyle和pmd警告。
如果你有兴趣帮忙(或者甚至只是想看看它是如何发展的话),那么你会爱上它并给我留言。