私の人生の間、私は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の下にと呼ばれるJARがあり、bcel-1.0.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。
私のプロジェクトディレクトリ構造は次のとおりです。
/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はビルドを停止しません- 出力の最後の部分"
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を実行しないだけです。
誰かがここで何が起こっているのかを見つけることができますか?前もって感謝します!