Mat*_*ine 8 java linux ant findbugs fedora
我安装了Fedora 20 findbugs RPMs,并设置了我的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>
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
java.lang.IllegalArgumentException:在/ usr/share/findbugs/lib中找不到findbugs.jar
所以我在生活的地方建立/usr/share/findbugs/lib了一个象征性的联系.这让我更进一步,但现在它吐了出来:/usr/share/javafindbugs.jar
findbugs:
[findbugs] Executing findbugs from ant task
[findbugs] Running FindBugs...
[findbugs] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassFormatException
Run Code Online (Sandbox Code Playgroud)
strace显示它已找到并打开/usr/share/java/findbugs-bcel.jar,所以我不知道为什么它无法加载该类.显式添加/usr/share/java/findbugs-bcel.jar到taskdef的类路径不会改变任何东西.
注意:我不是想在BCEL上运行FindBugs.FindBugs使用BCEL进行分析,我自己的代码根本不使用BCEL.
您需要一个<Auxclasspath/>子实体指向编译时使用的类路径.Findbugs使用构建的*.class文件,并且需要源代码在源代码中查明错误,您正在分析的类以及所有第三方jar的类路径以便能够理解代码:
<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>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你应该把findbugs jar放在你的项目中(我的偏好将${basedir}/antlib/findbugs在你的下面)并在你的<taskdef/>:
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
<classpath>
<fileset dir="${basedir}/antlib/findbugs"/>
</classpath>
</taskdef>
Run Code Online (Sandbox Code Playgroud)
这样,Findbugs就是您项目的一部分.检查你的项目的任何人都将自动拥有findbugs jar,并且能够运行你的findbugs任务,而无需下载jar并安装它$ANT_HOME/lib.
我使用任何可选的Ant任务jar(如PMD,Checkstyle和Ant-Contrib)执行此操作.它使其他人能够更容易地运行我的构建,并且我花更少的时间尝试向他们可以获得该jar的人解释,以及如何安装它.另外,如果您使用像Jenkins这样的Continuous Build系统,那么无论何时添加新的可选jar,您都不必使用服务器.