1

我将 findbugs 安装到我的 ant lib 目录中,并将以下代码添加到我的主 ANT 脚本中:

<target name="findbugs" depends="init">

    <findbugs home="C:\\findbugs\\" output="html outputFile="C:\\findbugs\\out.html" jvmargs="-Xms512M">
        <sourcePath path="${messageaggregator.src}" />
        <class location="${messageaggregator.src}"/>


    </findbugs>
</target>

在 init 目标中调用以下 xml:

<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask">

在运行 ANT 脚本时,我得到的只是以下输出:

发现错误:
    [findbugs] 从 ant 任务执行 findbugs
    [findbugs] 运行 FindBugs...
    [findbugs] BCEL 类兼容性错误。
    [findbugs] 发现的类 org.apache.bcel.generic.ObjectType 的版本不兼容
    [查找错误] 查找错误。请删除任何可能干扰的 BCEL 库。这可能会发生
    [findbugs] 如果你有旧版本的 BCEL 或包含旧版本 BCEL 的库
    [findbugs] 在“认可”目录中。
    [findbugs] 输出保存到 C:\\findbugs\\out.html

为什么 findbugs 不起作用?

4

4 回答 4

2

您与必须摆脱的旧版本 BCEL 发生冲突。它可能在您的 jre/lib/ext 目录中(坏主意),或者您为项目获得的 CLASSPATH 的一部分,或者可能是 Ant /lib 的一部分。在任何情况下,您都应该在 CLASSPATH 中找到所有 BCEL JAR,删除它们,并使用 FindBugs 所需的版本更新它们。

于 2009-03-09T17:45:09.620 回答
0

我发现该xalan:xalan:jar:2.6.0库(这是我项目中库的传递依赖项org.apache.xmlgraphics:batik-bridge:jar:1.7)包含org.apache.bcel.generic.ObjectType该类(可能是错误的版本)。此类可能会导致以下错误:

[INFO] 文件编码为 UTF-8
BCEL 类兼容性错误。
找到的类 org.apache.bcel.generic.ObjectType 的版本与
查找错误。请删除任何可能干扰的 BCEL 库。这可能会发生
如果您有旧版本的 BCEL 或包含旧版本 BCEL 的库
在“认可”目录中。
[信息] --------------------------------------------- -------------------------
[错误] 致命错误
[信息] --------------------------------------------- -------------------------
[信息] Java 返回:1
[信息] --------------------------------------------- -------------------------
[信息] 追踪
:Java 返回:1
        在 org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
        在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        在 java.lang.reflect.Method.invoke(Method.java:597)
        在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        在 org.apache.tools.ant.Task.perform(Task.java:348)
        在 groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:199)
        在 groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:153)
        在 groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:149)
        在 groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64)
        在 org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:784)
        在 org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:758)
        在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:170)
        在 org.codehaus.mojo.findbugs.FindBugsGui.execute(FindBugsGui.groovy:163)
        在 org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        在 org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        在 org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
        在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        在 java.lang.reflect.Method.invoke(Method.java:597)
        在 org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        在 org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        在 org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        在 org.codehaus.classworlds.Launcher.main(Launcher.java:375)

由于编译不需要工件(在我们的例子中),我们只是将其范围更改为runtime在 Mavenpom.xml文件中,这个错误消失了并且mvn clean findbugs:findbugs findbugs:gui再次工作(至少对我来说):

  ...
  <依赖项>
    <依赖>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>蜡染桥</artifactId>
      <版本>1.7</版本>
      <scope>运行时</scope>
    </依赖>
  </依赖>
  ...

希望这可以挽救某人的屁股...

于 2011-03-11T14:37:06.233 回答
0

Java 版本 1.6.0_06 包含旧的 BCEL 库。

java 版本“1.6.0_06”Java(TM) SE 运行时环境(构建 1.6.0_06-b02)Java HotSpot(TM) 客户端 VM(构建 10.0-b22,混合模式)

一旦我更改为 1.5.0_17 它对我来说很好。

于 2010-06-22T22:45:17.067 回答
-1

如果 findbugs 有自己的 BCEL 版本,那么为什么会出现此错误:

[findbugs] Executing findbugs from ant task
[findbugs] Running FindBugs...
[findbugs] The java class is not found:  org.apache.bcel.classfile.ClassFormatException
[findbugs] Output saved to C:\\findbugs\\out.html

如果我从 findbugs.home 目录中删除 bcel.jar,则会出现此错误。

于 2009-03-10T09:21:42.413 回答