Đối với cuộc sống của tôi, tôi đang cố gắng để có được FindBugs (2.0.1) để chạy như một phần của xây dựng dòng lệnh Ant của tôi. Tôi đã tải về JAR FindBugs và trích xuất nó để /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1:FindBugs từ chối tìm bcel jar trên classpath
Như bạn có thể thấy trong hình bên dưới /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib có một JAR gọi là bcel-1.0.jar
, và nếu bạn mở nó, bạn có thể thấy rằng tôi đã khoan xuống một lớp gọi là org.apache.bcel.classfile.ClassFormatException
. Giữ suy nghĩ đó đi.
Sau đó, tôi đã sao chép /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib/findbugs-ant.jar thành $ {env.ANT_HOME}/lib để có thể truy cập với phiên bản Ant được chạy từ dòng lệnh (thay vì cá thể Ant được tích hợp sẵn trong Eclipse).
cấu trúc thư mục dự án của tôi là như sau:
/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/
Bên 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>
Nhưng khi tôi chạy ant -buildfile build.xml echoMsg
từ dòng lệnh, tôi nhận được một lỗi trong 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!!!
Đây là những gì tôi có ngạc nhiên:
- Ngay cả với
failOnError="true"
, FindBugs không ngăn chặn việc xây dựng ngay cả khi ngoại lệ runtime này là gặp phải - Các mảnh cuối cùng của đầu ra "
Output saved to gen/audits/qual/findbugs.html
" là một lời nói dối! Có không có gì tronggen/audits/qual
! bcel-1.0.jar
hoàn toàn nằm dưới FindBugs, giống như mọi JAR khác trong thư mục lib /.
Xin lưu ý: findbugs-ant.jar
chắc chắn được sao chép sang ANT_HOME/lib; nếu không tôi sẽ nhận được một xây dựng không thành công phàn nàn rằng nó không thể tìm thấy các nhiệm vụ Ant. Như một kiểm tra sanity, tôi đã đi trước và đã làm điều này (tôi đã xóa findbugs-ant.jar
từ ANT_HOME/lib và đã xây dựng không thành công). Bản dựng này không thành công (nó thành công!). Nó chỉ không chạy findbugs.
Có ai có thể phát hiện những gì đang xảy ra ở đây không? Cảm ơn trước!
Xem http://stackoverflow.com/questions/12744819/findbugs-issue-with-ant/ –