当前位置: 首页 > 知识库问答 >
问题:

FindBugs拒绝在类路径上找到bcel jar

吕作人
2023-03-14

我一直在努力让FindBugs(2.0.1)作为命令行Ant构建的一部分运行。我下载了FindBugs JAR并将其提取到/home/myuser/java/repo/umd/FindBugs/2.0.1/findBugs-2.0.1:

正如您在屏幕截图中看到的,在/home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib下面有一个名为bcel-1.0.JAR的JAR,如果打开它,您可以看到我已经深入到一个名为org.apache.bcel.classfile.ClassFormatException的类。保持这种想法。

然后,我将/home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib/findbugs-ant.jar复制到${env.ant_home}/lib中,以使从命令行运行的Ant版本(而不是内置到Eclipse中的Ant实例)可以访问它。

我的项目目录结构如下:

/home/myuser/sandbox/workbench/eclipse/workspace/myapp/
    src/
        main/
            java/
        test/
            java/
    build/
        build.xml
        build.properties
    gen/
        bin/
            main/ --> where all main Java class files compiled to
            test/ --> where all test Java class files compiled to
        audits/
            qual/
        staging/

build.xml内部:

<project name="myapp-build" basedir=".." default="package"
    xmlns:fb="antlib:edu.umd.cs.findbugs">

    <path id="findbugs.source.path">
        <fileset dir="src/main/java">
            <include name="**.*java"/>
        </fileset>
        <fileset dir="src/main/test">
            <include name="**.*java"/>
        </fileset>
    </path>

    <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
        uri="antlib:edu.umd.cs.findbugs"/>

    <!-- Other Ant target omitted for brevity. -->

    <target name="run-findbugs">
        <!-- Create a temp JAR that FindBugs can use for analysis. -->
        <property name="fb.tmp.jar" value="gen/staging/${ant.project.name}-findbugs-temp.jar"/>
        <echo message="Creating ${fb.tmp.jar} for FindBugs."/>
        <jar destfile="gen/staging/${ant.project.name}-findbugs-temp.jar">
            <fileset dir="gen/bin/main" includes="**/*.class"/>
            <fileset dir="gen/bin/test" includes="**/*.class"/>
        </jar>

        <echo message="Conducting code quality tests with FindBugs."/>
        <fb:findbugs home="/home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1"
            output="html" outputFile="gen/audits/qual/findbugs.html" stylesheet="fancy-hist.xsl" failOnError="true">
            <sourcePath refid="findbugs.source.path"/>
            <class location="${fb.tmp.jar}"/>
        </fb:findbugs>
    </target>

    <target name="echoMsg" depends="run-findbugs">
        <echo message="The build is still alive!!!"/>
    </target>
</project>

但是,当我从命令行运行ant-buildfile build.xml echomsg时,我在FindBugs中得到一个错误:

run-findbugs:
    [echo] Creating gen/staging/myapp-build-findbugs-temp.jar for FindBugs.
    [jar] Building jar: /home/myuser/sandbox/workbench/eclipse/workspace/myapp/gen/staging/myapp-build-findbugs-temp.jar
    [echo] Conducting code quality tests with FindBugs.
[fb:findbugs] Executing findbugs from ant task
[fb:findbugs] Running FindBugs...
[fb:findbugs] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassFormatException
[fb:findbugs] Caused by: java.lang.ClassNotFoundException: org.apache.bcel.classfile.ClassFormatException
[fb:findbugs]   at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[fb:findbugs]   at java.security.AccessController.doPrivileged(Native Method)
[fb:findbugs]   at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[fb:findbugs]   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
[fb:findbugs]   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[fb:findbugs]   at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
[fb:findbugs] Could not find the main class: edu.umd.cs.findbugs.FindBugs2.  Program will exit.
[fb:findbugs] Java Result: 1
[fb:findbugs] Output saved to gen/audits/qual/findbugs.html

echoMsg:
    [echo] The build is still alive!!!

以下是我感到惊讶的地方:

  • 即使使用failonerror=“true”,FindBugs也不会停止生成,即使遇到此运行时异常
  • 最后一段输出“输出保存到gen/audits/qual/findbugs.html”是个谎言!gen/audits/qual中没有任何内容!
  • bcel-1.0.JAR绝对在FindBugs home下,就像lib/目录中的其他JAR一样。

请注意:findbugs-ant.jar肯定会复制到ant_home/lib;否则,我将得到一个失败的构建,抱怨它找不到Ant任务。作为一个健全性检查,我继续这样做了(我从ant_home/lib中删除了findbugs-ant.jar,得到了一个失败的构建)。这个构建没有失败(它成功了!)。它只是不运行FindBugs。

有人能看出这是怎么回事吗?提前道谢!

共有1个答案

郎飞龙
2023-03-14

有趣的是,我使用的是相同版本的Findbugs,并且jar文件名为bcel.jar而不是bcel-1.0.jar。我还从ant脚本运行Findbugs。尽管听起来很疯狂,但尝试再次下载Findbugs,将其解压缩到当前的位置,然后再次运行脚本。

 类似资料:
  • 问题内容: 我不太确定是什么原因导致的,因为清单中正确列出了它: 我还添加了来构建路径,并将其移至的顶部,但是它仍然给我同样的错误。 编辑:我完全重建了该项目,并且无法重现该错误。不知道是什么原因造成的。 问题答案: 我的项目有同样的问题。这是由于我的项目与我在项目中添加的库项目之间的android支持库版本冲突而发生的。将相同版本的android支持库放入您的项目和包含的库项目中,并清理构建 …

  • 问题内容: 我目前正在一个项目中,我必须使用纯本地ndk。当我尝试从Irrlicht引擎源运行helloworld示例时,它起作用了。然后,按照该示例的相同格式尝试在我的项目中使用它。但是我得到了: 在运行我的项目时。 这是我的main.cpp文件: n Android.mk: 我在AndroidManifest.xml中给了Activity名称: 我在这里做什么错?如有必要,我将发布完整代码。

  • 我目前正在做一个项目,在这个项目中我必须使用纯原生的NDK。当我尝试从Irrlicht引擎源代码运行helloworld示例时,它起到了作用。然后我尝试在我的项目中使用它,遵循该示例的相同格式。但我得到: 在运行我的项目时。 并且我在AndroidManifest.xml中给出了活动名称: 我在这里犯了什么错误?如果需要,我会发布完整的代码。

  • 我正在使用 Gradle 作为构建工具,在部署过程中,我遇到了一些我在下面提到的问题。 Gradle构建任务没有问题,但当我在tomcat8上部署它时,它显示如下错误。 build.gradle依赖文件如下: 错误消息: