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

Rob*_*ner 2 continuous-integration maven-2 hudson findbugs maven-plugin

更新

从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>
Run Code Online (Sandbox Code Playgroud)

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

<reporting>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>findbugs-maven-plugin</artifactId>
    </plugin>
  </plugins>
</reporting>
Run Code Online (Sandbox Code Playgroud)

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

public boolean equals(Object o) { return true; }
Run Code Online (Sandbox Code Playgroud)

我正在使用Hudson和maven2风格的项目.这项工作的目标是实现目标的简单父母

clean site
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

[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)
Run Code Online (Sandbox Code Playgroud)

版本信息:

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

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

Pas*_*ent 6

根据FindBugs FAQ,当使用错误版本的Apache BCEL时会出现此问题(参见Q2:当我单击"Find Bugs!"按钮时,我得到NoSuchMethodError或VerifyError).在你的情况下,我怀疑maven-findbugs-plugin是从JBoss获取BCEL库的,因为一些模糊的类加载问题.在Hudson的Jira中有一些非常相似的错误,例如HUDSON-5134(哈德森 findbugs插件也受到影响).

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

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

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

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