Maven 2 如何让Hudson生成Findbugs报告而不因异常而失败?

Maven 2 如何让Hudson生成Findbugs报告而不因异常而失败?,maven-2,continuous-integration,hudson,maven-plugin,findbugs,Maven 2,Continuous Integration,Hudson,Maven Plugin,Findbugs,更新 从Hudson Findbugs插件版本4.3开始,这不再是一个问题 结束更新 作为我问题的一个例子,我正在尝试构建以下项目 我在simple parent/pom.xml中添加了以下内容 <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plu

更新

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

结束更新

作为我问题的一个例子,我正在尝试构建以下项目

我在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>
我正在使用哈德逊和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上找到)在JBoss4.0.5.GA内部运行(在4.2.2.GA和5.1.0.GA上出现相同的错误)
  • Maven FindBugs插件2.3
  • Hudson FindBugs插件4.1

有关如何解决此问题的任何想法?

根据FindBugs常见问题解答,当使用错误版本的Apache BCEL时,会出现此问题(请参阅)。在您的例子中,我怀疑maven findbugs插件从JBoss获得BCEL库是因为一些模糊的类加载问题。Hudson的Jira中也有一些非常类似的bug,例如(Hudson findbugs插件也会受到影响)

我的理解是,这个问题最近(在v1.338中)被引入了,即使有解决办法,它也是一个Hudson bug(这是一个回归,JBoss没有问题)

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

  • 使用Hudson v1.338之前的版本(该版本的回归报告),但使用旧版本并坚持使用它肯定不是一个真正可行的解决方案
  • 删除JBoss的
    bcel.jar
    (位于
    server/SERVERNAME/lib
    )或将其替换为maven findbugs插件使用的版本(请参阅)。我不能确切地说这将如何影响JBoss(如果您删除它,似乎您将失去在调试模式下运行JBoss的能力,但我不能说如果您更换它,是否一切都会正常工作)

无论您要做什么,请创建一个新的Jira问题(),因为这是哈德逊的回归。他们标记为“不会修复”,因为有一个解决方法,但我不认为搞乱JBoss库是一个好的解决方案(我重复我自己,但这是一个Hudson bug)。因此,坚持并让Hudson开发人员知道其他用户受到此问题的影响将有助于整个社区(至少,我希望如此)。

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

正如Pascal所指出的,有一个类似的错误文件——该错误表示从Hudson 1.338版开始的行为。由于Hudson每周发布一次,所以很难确定哪个版本引入了bug。我注意到Hudson()发布了一个与类加载器相关的更改,我怀疑这是造成问题的原因,但我没有直接的证据


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

昨天我第一次尝试安装FindBugs插件时也遇到了同样的问题。。在这里撞我的头以为是我!感谢您的快速提问和更新。
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)