3

[findbugs 是这里的例子,问题适用于任何这样的 maven 插件]

不久前我参加了一个构建讲座,其中一个我非常喜欢的模式是:当向链中添加一个新工具并且你从 n 违规开始时,你应该保持 n 减少(高水位线)并且失败仅当当前检查超过 n 的最后一个值时才构建。

findbugs 刚刚被引入到我们的构建中,我们正在寻找一种方法来实现这种模式。我们无法通过插件配置看到任何方法,因此很好奇是否有人可以提及他们是如何实现这一目标的。我想显而易见的方法是自定义插件,但在我们继续充电之前,想听听其他人的想法。

4

4 回答 4

2

Findbugs(以及我知道的所有其他代码指标插件)会生成一个 XML 文件。我要做的是编写一个专门用于读取这些 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>
于 2010-06-25T05:05:45.597 回答
2

FindBugs 的情况在我看来有点特殊:违规不仅仅是装饰性的,它们可能是真正的错误,因此应该修复,至少是高优先级错误(即使用High阈值时)。

以防万一,我们遵循类似的模式(我们对 done 的定义包括不增加技术债务)但我们没有在 Maven 中实现它(并且我们不会使构建失败)。我们使用Sonar及其时间机器来跟踪指标的演变(我们跟踪每日的演变)。它对我们很有效,即使它不如构建失败那么强大。

于 2010-06-25T09:57:48.233 回答
1

我在 maven findbugs tracker 中提出了这个问题(参见http://jira.codehaus.org/browse/MFINDBUGS-115)。

此外,作为提出这个问题的一部分,我编写了一个提交的补丁。我们正在我们的大型多模块项目中成功运行此补丁。

您可以按照 findbugs-maven-plugin 站点上的说明同步代码并应用补丁,或者希望补丁或它的派生可以被插件的某些未来版本接受。

于 2010-06-30T03:54:10.350 回答
0

你提到这一点很有趣,因为我现在正在为我的雇主做这件事。我们分离了一个开源项目来保存这项工作,称为dybdob;由于这是一项正在进行中的工作,因此现在存储库中的代码相当可怕并且非常硬编码/hacky。但是,计划是或多或少地完全按照 seanizer 的建议进行:解析 XML,保持计数,如果增加则失败。

我实现的第一件事(再次:硬编码、hacky 和未记录)是一个插件,用于实际计算来自构建的 javac 编译器警告,并在数量增加时中断构建。现在可以了,我目前正在并行处理 findbugs、checkstyle 和 pmd 警告。

如果您有兴趣提供帮助(或者甚至只是想看看它是如何发展的),希望您能检查一下,并给我留言。

于 2010-07-05T06:32:49.737 回答