2015-07-16 5 views
7

Ich habe das Findbugs-Plugin in Eclipse verwendet und möchte nun die Funktionalität in mein Gradle-Build-Skript verschieben, sodass der Build fehlschlägt, wenn schwerwiegende Fehler entdeckt werden. Ich möchte die folgenden Fehler catagories haben deaktiviert:Disable findbugs überprüfte Bug-Kategorien in Gradle Build

  1. Experimental
  2. Sicherheit
  3. Internationalisierung
  4. Malicious Code

Die oben ist die Standardeinstellung in der Eclipse-Plugin. In Gradle, mit Blick auf die documentation kann ich nur eine Möglichkeit finden, einzelne Bug-Checks zu deaktivieren. Dies ist jedoch nicht machbar, mit Blick auf die source code, gibt es fast 100 von ihnen zu durchlaufen und einzeln aktivieren/deaktivieren.

Gibt es eine einfachere Möglichkeit, die oben genannten Kategorien zu deaktivieren, so dass Findbugs, die von Gradle aufgerufen werden, sich genauso verhalten wie die Standardkonfiguration des Eclipse-Plugins?

Bearbeiten: Bis jetzt haben wir herausgefunden, dass die Option "excludeFilter" verwendet werden kann, um eine XML-Datei anzugeben, die die Fehlerprüfprogramme enthält, die ausgeschlossen werden sollen. Eine Kategorie ausgeschlossen werden kann, dann in dieser Datei angegeben werden, wie folgt:

<FindBugsFilter> 
     <Match> 
       <Bug category="EXPERIMENTAL"/> 
     </Match> 
</FindBugsFilter> 

Die Bug-Kategorien durch die Angabe der Kategorie Attribut in der Ausschlussdatei deaktiviert werden können:

  • Internationalisierung: L18N
  • bösartiger Code: MALICIOUS_CODE
  • Experimentell: Experimenteller
  • Correctness: RICHTIGKEIT
  • Performance: PERFORMANCE
  • -Code-Stil: STYLE
  • Bad Praxis: BAD_PRACTICE

Allerdings sind diese Kategorie Attribute scheint nicht so dokumentiert werden, ich bin nicht sicher, ob ich sie alle gefunden. Werde diese Liste bearbeiten, da ich mehr finde.

Antwort

4

Sie haben Recht, die Liste der FindBug Kategorien seemes vollständig dokumentiert nicht. Wenn Sie das Quellpaket von https://sourceforge.net/projects/findbugs/files/findbugs/3.0.1/ durchsuchen, finden Sie die BugCategory-Definitionen in der Standardmeldung messages.xml.

extrahiert ich die Infomationen und erstellt einen Filter entsprechen alle in findbugs-3.0.1 gefunden Kategorien \ etc \ messages.xml:

<FindBugsFilter> 
    <!-- Probable bug - an apparent coding mistake resulting in code that was 
     probably not what the developer intended. We strive for a low false positive 
     rate. --> 
    <Match> 
     <Bug category="CORRECTNESS" /> 
    </Match> 

    <!-- Bogus random noise: intended to be useful as a control in data mining 
     experiments, not in finding actual bugs in software. --> 
    <Match> 
     <Bug category="NOISE" /> 
    </Match> 

    <!-- A use of untrusted input in a way that could create a remotely exploitable 
     security vulnerability. --> 
    <Match> 
     <Bug category="SECURITY" /> 
    </Match> 

    <!-- Violations of recommended and essential coding practice. Examples include 
     hash code and equals problems, cloneable idiom, dropped exceptions, Serializable 
     problems, and misuse of finalize. We strive to make this analysis accurate, 
     although some groups may not care about some of the bad practices. --> 
    <Match> 
     <Bug category="BAD_PRACTICE" /> 
    </Match> 

    <!-- code that is confusing, anomalous, or written in a way that leads itself 
     to errors. Examples include dead local stores, switch fall through, unconfirmed 
     casts, and redundant null check of value known to be null. More false positives 
     accepted. In previous versions of FindBugs, this category was known as Style. --> 
    <Match> 
     <Bug category="STYLE" /> 
    </Match> 

    <!-- code that is not necessarily incorrect but may be inefficient --> 
    <Match> 
     <Bug category="PERFORMANCE" /> 
    </Match> 

    <!-- code that is vulnerable to attacks from untrusted code --> 
    <Match> 
     <Bug category="MALICIOUS_CODE" /> 
    </Match> 

    <!-- code flaws having to do with threads, locks, and volatiles --> 
    <Match> 
     <Bug category="MT_CORRECTNESS" /> 
    </Match> 

    <!-- code flaws having to do with internationalization and locale --> 
    <Match> 
     <Bug category="I18N" /> 
    </Match> 

    <!-- Experimental and not fully vetted bug patterns --> 
    <Match> 
     <Bug category="EXPERIMENTAL" /> 
    </Match> 

</FindBugsFilter> 
3

Ich habe FindBugs noch nicht mit Gradle verwendet, aber es klingt, als ob die Option excludeFilter eine FindBugs-XML-Datei verwendet, mit der ganze Kategorien herausgefiltert werden können.

The FindBugs Filter manual

Weitere grobkörnigem Matching, Attribut Code. Es benötigt eine durch Kommas getrennte Liste von Bug-Abkürzungen. Für die grobkörnigste übereinstimmende Verwendungskategorieattribut, die eine kommagetrennte Liste von Fehlernategoriennamen verwendet: KORREKTUR, MT_KORREKTHEIT, BAD_PRACTICICE, LEISTUNG, STIL.

Wenn mehr als eines der oben genannten Attribute für dasselbe Element angegeben sind, werden alle Fehlermuster, die entweder einem der angegebenen Musternamen oder Abkürzungen oder Kategorien entsprechen, zugeordnet.

Also ich denke, Sie in der Lage sein sollte, eine XML-Datei wie folgt zu machen:

<FindBugsFilter> 

    <Match> 

    <Bug pattern="EXPERIMENTAL"/> 
    </Match> 

    <Match> 
    <Bug pattern="MALICIOUS_CODE" /> 
    </Match> 
    ...etc 
</FindBugsFilter> 
+0

Danke, das funktioniert nicht 100%, aber nicht mich auf rechts Spur. Das Code-Attribut scheint jedoch nicht für die Kategoriebeschreibungen zu funktionieren. Am nächsten komme ich mit dem Attribut "category". Ich kann dann Kategorie * Abkürzungen * angeben. Dies unterscheidet sich jedoch leider auch von den textuellen Kategorien. Zum Beispiel, "Internationalisierung" Bugs echte Kategorie ist "I18N". Wenn ich verwende, werden Fehler der Internationalisierungskategorie ausgeschlossen. Ich kann diese Abkürzungen in der Dokumentation nicht finden, also muss ich die Quelle nach ihnen durchsuchen, Spaß mal voraus ... – mdewit

+0

Entschuldigung, ich muss veraltete Dokumentation gefunden haben. Lassen Sie uns wissen, was die Arbeitscodes sind, damit ich die Antwort aktualisieren kann, so dass es für jemanden leicht ist, das nächste Mal zu finden – dkatzel