Pour la vie de moi, j'essaie d'obtenir des Findbugs (2.0.1) pour fonctionner dans le cadre de ma construction de ligne de commande. J'ai téléchargé le jar Findbugs et l'extrait à /home/myuser/java/repo/umd/finindbugs/2.0.1/findbugs-2.0.1:
p>
Comme vous pouvez le voir dans la capture d'écran, sous /home/myuser/java/repo/umd/finindbugs/2.0.1/findbugs- 2.0.1 / LIB Il y a un pot appelé J'ai ensuite copié /home/myuser/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1/lib/finindbugs-ant.jar à $ {env.ant_home } / lib pour le rendre accessible à la version de la fourmi qui est dirigé à partir de la ligne de commande (au lieu de l'instance de fourmis qui est intégrée à Eclipse). p> Ma structure de répertoire de projet est la suivante: intérieur mais quand je cours bcel-1.0.jar code>, et si vous l'ouvrez, vous pouvez voir que j'ai foré à une classe appelée
org.apache.bel. Classfile.classformatExceptionXception code>. Tenez cette pensée. P>
build.xml code>: p>
ant - buildfile build.xml echomsg code> à partir de la ligne de commande, je reçois une erreur dans Findbugs: p>
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!!!
6 Réponses :
Je suppose que vous avez réellement BCEL dans la classe de classe deux fois. Et le fichier est chargé du pot en dehors de la bibliothèque Findbugs. Ensuite, lorsque Findbugs essaie de charger le pot, il trouve le BCEL La solution serait de trouver où d'autre BCEc existe dans la classe de classe et supprimez-la. P>
C'est une excellente suggestion @Zagrev (+1) Je vais essayer d'essayer quelques minutes ici. Juste hors de curiosité, qu'est-ce qui vous a fait soupçonner cela pour être le cas? Je demande seulement parce que je n'en aurais pas pensé dans 1 000 ans et ça a du sens! (J'ai définitivement ajouté ce pot ailleurs ailleurs ...)
Expérience horrible et horrible :)
Eh bien, cela a fallu un moment, mais j'ai traversé tous les fichiers de jar sous ant_home / lib code> ainsi que dans mon répertoire de base Findbugs, et que
bcel-1.0.jar code> est Le bocal seulement i> contenant cette classe. Toute autre idée ?? Merci encore!
Vous devrez peut-être avoir à définir un AuxClassPath pour inclure le point de classe que votre Vous ne montrez pas comment la compilée a eu lieu, alors je Je suppose que votre référence a créé un
compile.classapath code> de classePath Référence: P>
<javac destdir="gen/bin/main"
srcdir="src/main/java"
classpathref="compile.classpath"/>
<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">
<auxClasspath refid="compile.classpath"/>
<sourcePath refid="findbugs.source.path"/>
<class location="${fb.tmp.jar}"/>
</fb:findbugs>
Merci @david W. (+1) - Ajout du AuxClassPath code> et toujours la même erreur. J'ai vraiment l'impression que Zagagev aurait pu être sur quelque chose avec l'idée de Jar en double, mais je ne peux pas sembler le trouver. Je me demande, y a-t-il un outil là-bas que je pourrais pointer mon Ant_Home / Lib Annuaire et avoir imprimer une liste de chaque classe Java à l'intérieur de chaque bocal dans ce répertoire? De cette façon, je pourrais scanner la sortie pour des classes de BCEcle en double.
@pnongrata "S est un outil là-bas que je pourrais pointer mon Ant_Home / Lib Annuaire vers et d'imprimer une liste de chaque classe Java à l'intérieur de chaque bocal dans ce répertoire?" I> Jetez un coup d'oeil chez TATINE TALE de JBoss .
Vous pouvez déboguer lorsque BCEL est chargé d'utiliser l'argument -verbose: argument de classe à la JVM. p>
Pour transmettre cet argument à la JVM Exécuter lesbugs, utilisez le drapeau JVMargs sur le plug-in Trouver Bugs P>
jvmargs p>
Attribut facultatif. Il spécifie les arguments qui devraient être passé à la machine virtuelle Java utilisée pour exécuter des tremblements de recherche. Tu pourrais avoir besoin de Pour utiliser cet attribut pour spécifier des indicateurs pour augmenter la quantité de Mémoire La JVM peut utiliser si vous analyse un très grand programme. P> blockQuote>
Comment avez-vous peuplé la recherche de Bugs Lib Jar? Quand je télécharge que Findbugsts.zip, je reçois un annuaire libéré qui a l'air très différent de ce que vous montrez. En particulier, le mien contient un BCEC avec une version de 5.3, pas 1,0 comme vous le montre. P>
Merci @sbridges je vais vérifier - et j'utilise une fourchette 1.8.4
Je pense que vous avez la mauvaise version BCEL. Si je télécharge le téléchargement de Findbugs 2.0.1.zip, la BCEL informatique inclut est 5.0.3
Je ne vois pas de votre script de fourmis que BCEC atterrit sur n'importe quel plan de classe que la tâche Findbugs serait capable de le charger. Vous voudrez peut-être essayer de faire explicitement votre tâche d'inclure explicitement toutes les besoins de Findbugs.
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" uri="antlib:edu.umd.cs.findbugs"> <classpath> <fileset dir="/home/java/repo/umd/findbugs/2.0.1/findbugs-2.0.1"> <include name="*.jar"/> </fileset> </classpath> </taskdef>
chose drôle parce que j'utilise la même version de Findbugs et le fichier JAR est nommé bcel.jar code> pas
bcel-1.0.jar code>. Je suis également en cours d'exécution dans un script code> ant code>. Aussi fou que cela puisse sonner, essayez de télécharger à nouveau les tremblements Findbugs, décompressez-la à la place de votre actuel et exécutez votre script une fois de nouveau. P>
La plupart des problèmes de classe de classe que vous pouvez déboguer avec hochette . Cela vous rendra compte de tous les bocaux de votre projet. Toutes les classes dupliquées, etc. m'ont sauvé beaucoup de temps. P>
Il y a aussi une tâche de fourmis prête: http: / /docs.jboss.org/tattletale/userguide/1.2/fr-us/html/ant.html P>
Voir Stackoverflow.com/questions/12744819/Findbugs-issue-with- Ant