Por mi vida, estoy tratando de conseguir FindBugs (2.0.1) para que se ejecute como parte de mi compilación Ant de línea de comandos. He descargado el archivo JAR FindBugs y extrajeron a /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1:FindBugs se niega a encontrar bcel jar en classpath
Como se puede ver en la pantalla, bajo /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib hay un JAR llamado bcel-1.0.jar
, y si lo abres, puedes ver que he profundizado en una clase llamada org.apache.bcel.classfile.ClassFormatException
. Sostenga ese pensamiento.
Copié /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib/findbugs-ant.jar en $ {env.ANT_HOME}/lib para que sea accesible a la versión de Ant que se ejecuta desde la línea de comandos (en lugar de la instancia Ant que viene incorporada en Eclipse).
Mi estructura de directorios del proyecto es el siguiente:
/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/
Dentro 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>
Pero cuando corro ant -buildfile build.xml echoMsg
desde la línea de comandos, me sale un error en 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!!!
Esto es lo que me tiene sorprendido:
- Incluso con
failOnError="true"
, FindBugs no es detener la generación aún cuando esta excepción en tiempo de ejecución se encuentra - La última pieza de la producción "
Output saved to gen/audits/qual/findbugs.html
" es una mentira! No hay nada engen/audits/qual
! - El
bcel-1.0.jar
está absolutamente debajo de los FindBugs en casa, al igual que cualquier otro JAR en el directorio lib /.
Atención:: la findbugs-ant.jar
es, sin duda copian en ANT_HOME/lib; de lo contrario, obtendría una compilación fallada quejándose de que no podía encontrar las tareas Ant. Como un control de cordura, seguí adelante y lo hice (borré el findbugs-ant.jar
de ANT_HOME/lib y obtuve una compilación fallada). Esta construcción no falla (¡tiene éxito!). Simplemente no ejecuta findbugs.
¿Alguien puede detectar lo que está pasando aquí? ¡Gracias por adelantado!
Ver http://stackoverflow.com/questions/12744819/findbugs-issue-with-ant/ –