我安装了Fedora 20 findbugs,并设置了Ant build.xml文件:
<property name="findbugs.home" location="/usr/share/findbugs"/>
<target name="findbugs" description="static bytecode analysis">
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
</taskdef>
<findbugs home="${findbugs.home}" output="xml" outputFile="bcel-fb.xml">
<sourcePath path="${src.dir}"/>
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
</findbugs>
</target>这给了我一个错误:
java.lang.IllegalArgumentException:在/usr/share/findbug/lib中找不到findbugs.jar
因此,我将/usr/share/findbugs/lib作为/usr/share/java的一个象征性链接,findbugs.jar就住在这里。这让我走得更远了,但现在又吐出来了:
findbugs:
[findbugs] Executing findbugs from ant task
[findbugs] Running FindBugs...
[findbugs] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassFormatExceptionstrace显示它找到并打开了/usr/share/java/findbugs-bcel.jar,所以我不知道它为什么不能加载这个类。显式地向taskdef的类路径添加/usr/share/java/findbugs-bcel.jar不会改变任何事情。
注意::我不是试图在BCEL上运行FindBugs。FindBugs使用BCEL进行分析,而我自己的代码根本不使用BCEL。
发布于 2014-02-18 01:17:02
您需要一个指向编译时使用的类路径的<Auxclasspath/>子实体。Findbug使用构建的*.class文件,并需要源代码在错误所在的源代码中定位、分析的类以及所有第三方jars的类路径,以便能够理解代码:
<findbugs
home="${findbugs.home}"
output="xml"
outputFile="bcel-fb.xml">
<auxClasspath refid="main.classpath"/> <!-- Third party jars classpath -->
<class location="${main.destdir}"/> <!-- Class files you're analyzing -->
<sourcePath path="${main.srcdir}"/> <!-- Source directory -->
</findbugs>顺便说一句,您应该将findbugs放在您的项目中(我的首选是${basedir}/antlib/findbugs),并在<taskdef/>中使用它。
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
<classpath>
<fileset dir="${basedir}/antlib/findbugs"/>
</classpath>
</taskdef>这样,Findbug是项目的一部分。任何签出项目的人都将自动拥有findbugs,并且能够运行findbug任务,而无需下载jar并将其安装在$ANT_HOME/lib中。
我使用任何可选的Ant任务jars来完成这个任务,比如PMD、Checkstyle和Ant-cont肋骨。这使得其他人可以更容易地运行我的构建,我花了更少的时间试图向人们解释他们在哪里可以得到这个罐子,以及如何安装它。另外,如果您使用像Jenkins这样的连续构建系统,那么在添加一个新的可选jar时,您不需要对服务器进行修改。
发布于 2014-02-24 12:26:42
试着用这个
添加任务定义
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>定义目标
<property name="findbugs.home" value="/export/home/daveho/work/findbugs" />
<target name="findbugs" depends="jar">
<findbugs home="${findbugs.home}"
output="xml"
outputFile="bcel-fb.xml" >
<auxClasspath path="${basedir}/lib/Regex.jar" />
<sourcePath path="${basedir}/src/java" />
<class location="${basedir}/bin/bcel.jar" />
</findbugs>
</target>这个目标将在FindBugs上执行bcel.jar,这是BCEL的构建脚本生成的Jar文件。(通过使它依赖于"jar“目标,我们确保库在运行FindBugs之前是完全编译的。)FindBugs的输出将以XML格式保存到一个名为bcel-fb.xml的文件中。辅助Jar文件Regex.jar被添加到aux类路径中,因为它是由主BCEL库引用的。指定了源路径,以便保存的bug数据能够准确引用BCEL源代码。
关于更多的信息。
发布于 2014-02-22 21:50:31
如果findbug不位于:<property name="findbugs.home" location="/usr/share/findbugs"/>
我会将Ant Findbug配置更改为Findbug库文件的位置:
<property name="findbugs.home" location="/usr/share/java"/>,甚至,<property name="findbugs.home" location="/usr/share/java/findbugs"/>是这个目录。
这看起来确实是个类路径问题。
https://stackoverflow.com/questions/21795698
复制相似问题