代码之家  ›  专栏  ›  技术社区  ›  Rob Spieldenner

如何让Hudson在不因异常而失败的情况下生成findbugs报告?

  •  2
  • Rob Spieldenner  · 技术社区  · 15 年前

    更新

    从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>
    

    下面是简单天气/pom.xml和简单webapp/pom.xml

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

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

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

    我在用哈德逊和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
    • Java1.5.0Sy22
    • 在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

    有什么解决办法吗?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Pascal Thivent    15 年前

    根据findbugs常见问题解答,当使用错误版本的ApacheBcel时会出现此问题(请参见 Q2: When I click the "Find Bugs!" button, I get a NoSuchMethodError or VerifyError )。在您的例子中,我怀疑MavenFindbugs插件从JBoss获取BCEL库是因为一些模糊的类加载问题。在哈德逊的圣战中也有一些非常类似的错误,例如 HUDSON-5134 (Hudson FindBugs插件也会受到影响)。

    我的理解是这个问题已经被引入 最近 (在v1.338中)而且,即使有解决方法,它 一个Hudson bug(这是一个回归,JBoss没有问题)。

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

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

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

        2
  •  0
  •   Jim Rush    15 年前

    提供的其他答案更好,但添加的一个备选方案是:使用Ant或批处理文件创建一个单独的构建步骤,而不管findbugs步骤是否失败。哈德逊插件仍然可以用来显示结果。

        3
  •  0
  •   Michael Donohue Jan Gressmann    15 年前

    正如Pascal指出的,有一个类似的bug文件- HUDSON-5134 -这个bug表明这个行为是从哈德逊1.338版开始的。由于哈德逊每周发布一次,很难确定哪个版本引入了一个bug。我注意到Hudson发布了一个与类加载器相关的更改 version 1.337 ( HUDSON-5048 我怀疑这就是问题的根源,但我没有直接的证据。

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