【问题标题】:How do I get Hudson to generate a Findbugs report without failing due to an exception?如何让 Hudson 生成 Findbugs 报告而不会因异常而失败?
【发布时间】:2011-01-07 10:33:29
【问题描述】:

更新

从 Hudson Findbugs 插件 4.3 版开始,这不再是问题

结束更新

作为我的问题的一个例子,我正在尝试构建以下项目http://www.sonatype.com/books/mvnex-book/reference/multimodule.html

我将以下内容添加到 simple-parent/pom.xml

<reporting>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>findbugs-maven-plugin</artifactId>
      <version>2.3</version>
      <configuration>
         <findbugsXmlOutput>true</findbugsXmlOutput>
         <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
         <xmlOutput>true</xmlOutput>
      </configuration>
    </plugin>
  </plugins>
</reporting>

以下是simple-weather/pom.xml和simple-webapp/pom.xml

<reporting>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>findbugs-maven-plugin</artifactId>
    </plugin>
  </plugins>
</reporting>

我在其中一个类中插入了以下可怕的 equals 方法,以使 FindBugs 产生一些问题(因为 0 个错误没有错误):

public boolean equals(Object o) { return true; }

我正在使用 Hudson 和 maven2 风格的项目。这项工作是针对有目标的简单父母pom

clean site

我得到以下异常:

[INFO] Generating "FindBugs Report" report.
[java] Warnings generated: 2
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Cannot inherit from final class
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.VerifyError: Cannot inherit from final class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at hudson.remoting.RemoteClassLoader$ClassLoaderProxy.fetch2(RemoteClassLoader.java:370)
at sun.reflect.GeneratedMethodAccessor594.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:274)
at hudson.remoting.Request$2.run(Request.java:270)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:595)

版本信息:

  • Maven 2.2.1
  • Java 1.5.0_22
  • Hudson 1.341(也可以在 1.339 上找到)在 JBoss 4.0.5.GA 中运行(在 4.2.2.GA 和 5.1.0.GA 上同样的错误)
  • Maven FindBugs 插件 2.3
  • Hudson FindBugs 插件 4.1

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 当我第一次尝试安装 FindBugs 插件时遇到了同样的问题昨天.. 在这里撞我的头以为是我!感谢您的快速提问和更新。

标签: maven-2 continuous-integration hudson maven-plugin findbugs


【解决方案1】:

正如 Pascal 指出的那样,有一个类似的错误提交 - HUDSON-5134 - 该错误表明该行为始于 Hudson 版本 1.338。由于 Hudson 每周发布一次,因此很难确定哪个版本引入了错误。我注意到 Hudson version 1.337 (HUDSON-5048) 发布了一个与类加载器相关的更改,我怀疑这是导致问题的原因,但我没有直接证据。

但这可能意味着您需要回滚到 1.337 或更早版本才能避免此问题。

【讨论】:

    【解决方案2】:

    根据 FindBugs 常见问题解答,当使用错误版本的 Apache BCEL 时会出现此问题(请参阅Q2: When I click the "Find Bugs!" button, I get a NoSuchMethodError or VerifyError)。在您的情况下,我怀疑 maven-findbugs-plugin 由于一些模糊的类加载问题而从 JBoss 获取 BCEL 库。 Hudson 的 Jira 中有一些非常相似的错误,例如HUDSON-5134(hudson findbugs 插件也受到影响)。

    我的理解是最近(在 v1.338 中)引入了这个问题,即使有解决方法,它一个 Hudson 错误(它是回归,这不是 JBoss 的问题)。

    现在,IMO 有两种解决方案:

    • 使用 v1.338 之前的 Hudson 版本(报告了此版本的回归),但使用旧版本并坚持使用它肯定不是真正可行的解决方案。
    • 删除或替换 JBoss 的 bcel.jar(在 server/SERVERNAME/lib 中)为 maven-findbugs-plugin 使用的版本(参见 dependencies)。我无法确切说明这将如何影响 JBoss(如果删除它,您似乎将失去在调试模式下运行 JBoss 的能力,但我不能说如果更换它是否一切正常) .

    无论您要做什么,请创建一个新的 Jira 问题 (http://issues.hudson-ci.org/),因为这是 Hudson 的回归。他们已将HUDSON-5134 标记为“不会修复”,因为有一种解决方法,但我不认为弄乱 JBoss 库是一个好的解决方案(我在重复自己,但这是一个 Hudson 错误)。因此,坚持并让 Hudson 开发人员知道其他用户受到此问题的影响将有助于整个社区(至少,我希望如此)。

    【讨论】:

      【解决方案3】:

      提供的其他答案更好,但可以添加一个替代方法:使用 Ant 或批处理文件创建一个单独的构建步骤,该步骤不关心 FindBugs 步骤是否失败。 Hudson 插件仍可用于显示结果。

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        • 2018-03-12
        • 2014-07-29
        相关资源
        最近更新 更多