Per la vita di me, sto cercando di ottenere FindBugs (2.0.1) da eseguire come parte della mia build di form da riga di comando. Ho scaricato il JAR FindBugs ed estratto a /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1:FindBugs rifiuta di trovare il vaso bcel su classpath
Come potete vedere nello screenshot, sotto /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib c'è un JAR chiamato bcel-1.0.jar
, e se lo apri, puoi vedere che ho eseguito il drill-down su una classe chiamata org.apache.bcel.classfile.ClassFormatException
. Tenere quel pensiero.
Ho quindi copiato /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib/findbugs-ant.jar a $ {env.ANT_HOME}/lib per renderlo accessibile alla versione di Ant che viene eseguita dalla riga di comando (anziché dall'istanza Ant che viene incorporata in Eclipse).
Il mio progetto struttura di directory è la seguente:
/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/
All'interno 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>
Ma quando corro ant -buildfile build.xml echoMsg
dalla riga di comando, ottengo un errore in 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!!!
Ecco cosa mi ha fatto stupito:
- Anche con
failOnError="true"
, FindBugs non è arrestare la build, anche quando si verifica questa eccezione di runtime - L'ultimo pezzo di uscita "
Output saved to gen/audits/qual/findbugs.html
" è una menzogna! C'è nulla ingen/audits/qual
! - Il
bcel-1.0.jar
è assolutamente sotto casa FindBugs, proprio come ogni altro JAR nella directory lib /.
Si prega di notare: il findbugs-ant.jar
è sicuramente copiato ANT_HOME/lib; altrimenti mi troverei in una build fallita lamentandomi che non riusciva a trovare le attività di Ant. Come controllo di integrità, sono andato avanti e l'ho fatto (ho cancellato lo findbugs-ant.jar
da ANT_HOME/lib e ho ottenuto una build fallita). Questa build non fallisce (ci riesce!). Semplicemente non esegue findbugs.
Qualcuno può vedere cosa sta succedendo qui? Grazie in anticipo!
Vedi http://stackoverflow.com/questions/12744819/findbugs-issue-with-ant/ –