2

更新

从 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

有想法该怎么解决这个吗?

4

3 回答 3

6

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

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

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

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

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

于 2010-01-21T04:42:05.333 回答
0

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

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

于 2010-01-21T15:16:51.760 回答
0

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

于 2010-01-21T12:46:38.763 回答