2009-07-02 11 views
7

Ich bin dabei, FindBugs zu evaluieren und versuche, den excludeFilter zu verwenden, damit das Tool die Testpakete oder die generierten EJB-Stubs nicht verarbeitet.Probleme mit FindBugs Filter ausschließen

Ich habe versucht, die folgenden:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Or> 
     <Class name="~.*\.^_*"/> 
     <Class name="~.*EJS*"/> 
    </Or> 
    <Bug pattern="MALICIOUS_CODE"/> 
</Match> 

Die generierten EJBs noch betrachtet werden. Kann mir jemand eine bessere Richtung geben?

Ich möchte alle Klassen ausschließen aus, die mit "_"

Beispiel:

com/mycompany/Business/admin/ejb/_AdminRemoteHome_Stub.java

com/mycompany/Business/admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java

Aktualisierte Filterdatei.

ich ändern Sie die Filterdatei auf die folgende Struktur die vorgeschlagenen REGx Änderungen mit und jetzt die Dinge funktionieren wie erwartet:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Class name="~.*\._.*"/> 
</Match> 
<Match> 
    <Class name="~.*?EJS.*"/>  
</Match> 

Sieht aus wie ich zurück gehen müssen und Pinsel auf meine regx.

+0

Erscheinen noch EJS-Klassen? Hast du jetzt nur das Problem für '_' Klassen? – VonC

Antwort

7

In Bezug auf FindBugFilter,

(nur um sicher zu sein) sind Sie sicher, dass Ihr die kompilierte Klassendateien directoriesa erwägen, und nicht die sourcepath? (wie in diesem SO answer erwähnt).

Vom Java element name matching Abschnitt:

Wenn der Name Attribut der Klasse, Methode oder ein Feld beginnt mit dem Zeichen ~ der Rest von Attributinhalt als Java regulären Ausdruck interpretiert wird, die gegen die Namen übereinstimmt des Java-Elements in Frage.

Wäre der folgende Regex genauer?

<Class name="~.*\._.*"/> 
    <Class name="~.*?EJS.*"/> 
  • .*\._.*“ statt „.*\.^_*“, weil die anchor soll das RegexMuster angewendet zu Beginn der Zeichenfolge übereinstimmen.

  • ".*?EJS.*" statt ".*EJS*", weil die ?quantifier die passende faul macht, vermeidet zu 'essen' EJS. (Plus "S*" bedeutet "0 oder n S", was hier nicht helfen)

+0

Ich habe gerade Ihren Vorschlag verwendet, aber die Klassen tauchen immer noch im Bericht auf. Hier – boyd4715

+0

ist, was der Bericht generiert: com/mycompany/Business/admin/ejb/_AdminRemoteHome_Stub.java Zeile 33 \t MALICIOUS_CODE \t interne Darstellung durch die Rückkehr Bezug auf veränderbares Objekt aussetzen Kann – boyd4715

+1

ich das gleiche Problem haben, es nicht sogar ausschließen: HaveAGuess

1

Meine findbugs ausschließen Datei nicht wie oben arbeitet. Ich benutze das findbugs-maven-plugin v3.0.0. Um das Problem zu lösen, habe ich einen Build ausgeführt, der findbugsXml generiert.xml, dann ausgegeben:

mvn findbugs:gui 

Dies startet die Benutzeroberfläche zu Findbugs. Ich habe dann die Datei findbugsXml.xml geladen, zu den Warnungen navigiert, die ich ausgeschlossen haben wollte, sie ausgeschlossen und dann die Ausschlüsse in findbugs_exclude.xml gespeichert. Ich habe dies auf die Maven Plugin als

<excludeFilterFile>findbugs_exclude.xml</excludeFilterFile> 

Die erzeugten Datei funktioniert und die Ausschlüsse sind wirklich aus dem findbugs Bericht weggelassen.

Ein weiterer großer Tipp, den ich für das Maven Plugin gefunden wurde hinzugefügt:

<omitVisitors>UnreadFields</omitVisitors> 
0

Es ist hilfreich zu erwähnen, dass, wenn eine Klasse ausgeschlossen werden soll, mit seinen inneren Klassen vorsichtig sein. Es dauerte Stunden, um herauszufinden, dass anstelle von

<Match> 
    <Class name="com.some.Proto" /> <!--or com.some.Proto$.*--> 
</Match> 

ich die folgende Konfiguration mit seinen inneren Klassen eins nach dem anderen

<Match> 
    <Or> 
    <Class name="com.some.Proto$Event" /> 
    <Class name="com.some.Proto$Msg" /> 
    <Class name="com.some.Proto$Query" /> 
    </Or> 
</Match> 

Und bisher habe ich nicht herausgefunden, aufgeführt verwenden sollten, wie ausschließen eine Klasse und alle ihre Unterklasse (kein Hinweis in filter), eine einfache Regex wie com.some.Proto$.* funktioniert einfach nicht. Und ich habe auch bemerkt, dass $ in Regex das Ende der Zeile bedeutet, während findbugs es als ein Textzeichen gelesen habe, denke ich, sonst hätte es com.some.Proto\$Query sein sollen. Außerdem half mir ein wertvoller regex tester auf Regex, indem ich jeden Charakter darin erklärte.

Verwandte Themen