私の人生にとって、私はFindBugs(2.0.1)をコマンドラインのAntビルドの一部として実行しようとしています。私はFindBugsのJARをダウンロードして/home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1にそれを抽出:FindBugsはクラスパスでbcel jarを見つけることを拒否します
あなたは下のスクリーンショットで見ることができるように/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にコピーしてアクセス可能にしました(Eclipseに組み込まれているAntインスタンスの代わりに)コマンドラインから実行されるAntのバージョンに変更します。
次のように私のプロジェクトのディレクトリ構造は次のとおりです。
build.xml
インサイド
/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/
:
<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のは、この実行時例外は、「Output saved to gen/audits/qual/findbugs.html
」出力の - 最後のピースが発生した場合でも、ビルドを停止されていない嘘です! はありませんに
gen/audits/qual
! bcel-1.0.jar
は、lib /ディレクトリの他のすべてのJARとまったく同じようにFindBugsホームの下にあります。
に注意してください。findbugs-ant.jar
は間違いなく、ANT_HOME/libににコピーされます。さもなければ、私はAntタスクを見つけることができないと不平を言ってビルドに失敗するでしょう。サニティチェックとして、私は先に進んでこれを行いました(私はfindbugs-ant.jar
をANT_HOME/libから削除してビルドに失敗しました)。このビルドは失敗しません(成功しました!)。それはfindbugsを実行しません。
ここでは何が起こっているのか誰にも気付くことができますか?前もって感謝します!
は素晴らしい提案@Zagrev(1)I'LLだhttp://stackoverflow.com/questions/12744819/findbugs-issue-with-ant/ –