In der Softwareentwicklung haben sich verschiedene Code Richtlinien gefestigt, seien es die “normalen” Java Beans Konventionen oder aber auch wie in diesem Tutorial die Checkstyle und FindBugsrichtlinien, sicherlich gibt es hier auch viele andere Tools welche genannt werden könnten jedoch ist mir aufgefallen das die Checks sich wiederholen und somit der Mehrwert nicht deutlich steigt.
Hier in diesem Tutorial möchte ich nun beschreiben wie ich Checkstyle und Findbugs in meinem aktuellen Android Projekt eingerichtet habe.
Build Tool & IDE
Als Build Tool verwende, ich Gradle welche in dem Android Studio enthalten ist und somit nicht extra konfiguriert werden muss.
Anlegen der Verzeichnisstruktur
Für die Ablage der Konfigurationsdateien erstellt man folgende Verzeichnisstruktur
(gelb markiert).
Erstellen des Gradle Skriptes
Aus einem anderen englischsprachigen Tutorial habe ich mir ein passendes Gradle Script geladen und meinen Bedürfnissen wie folgt angepasst.
(Am Ende des Tutorials gibt es alle Dateien im praktischen ZIP Download)
apply plugin: 'checkstyle' apply plugin: 'findbugs' check.dependsOn 'checkstyle', 'findbugs', 'lint' task checkstyle(type: Checkstyle) { configFile file("${project.rootDir}/config/checkstyle/sun_checks.xml") configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/checkstyle/suppressions.xml").absolutePath source 'src' include '**/*.java' exclude '**/gen/**' classpath = files() } task findbugs(type: FindBugs, dependsOn: assembleDebug) { ignoreFailures = false effort = "max" reportLevel = "high" excludeFilter = new File("${project.rootDir}/config/findbugs/findbugs-filter.xml") classes = files("${project.rootDir}/app/build/intermediates/classes") source 'src' include '**/*.java' exclude '**/gen/**' reports { xml.enabled = false html.enabled = true xml { destination "$project.buildDir/reports/findbugs/findbugs.xml" } html { destination "$project.buildDir/reports/findbugs/findbugs.html" } } classpath = files() } android { lintOptions { abortOnError true xmlReport false htmlReport true lintConfig file("${project.rootDir}/config/quality/lint/lint.xml") htmlOutput file("$project.buildDir/reports/lint/lint-result.html") xmlOutput file("$project.buildDir/reports/lint/lint-result.xml") } }
Dieses Gradle Script muss nun noch in das bestehende Gradle Script integriert werden.
Dazu wird folgende Zeile der Datei “build.gradle (Module: app)” hinzugefügt.
apply from: '../config/quality.gradle'
Ablage der Konfigurationsdateien für Checkstyle und FindBugs
Beispiel Konfigurationsdateien kann man auf der Herstellerseite herunterladen und nach seinen Bedürfnissen einfach anpassen.
Checkstyle
Ich habe mir die “sun_checks.xml” geladen und einige für mich nicht benötigte Checks auskommentiert.
FindBugs
Eine Datei mit den FindBugs Filtern kann man unter http://findbugs.sourceforge.net/ finden.
Einbinden in den Buildprozess
Nachdem die Scripte erweitert bzw. angelegt wurden kann man die Task “checkstyle” und “findbugs” dem Buildprozess hinzufügen.
Dazu klickt man auf “Run” -> “Edit Configurations” dort wählt man die App aus (sollte vorselektiert sein.) und klickt im unteren Bereich aus das grüne + Zeichen dieses sollte nun folgendes Untermenü öffnen, wo wir den Eintrag “Run Gradle task” auswählen.
Es sollte sich nun folgende Maske öffnen in welchem wir das Projekt wählen und den Task eingeben welcher gestartet werden soll.
Dieses wiederholen wir nun auch für den Findbugs Task und das Ergebnis sollte danach wiefolgt aussehen.
Nachdem der Dialog mit der Schaltfläche “Apply” und “OK” bestätigt wurde, wird nun bei jedem Build Vorgang Checkstyle und Findbugs gestartet. Sollte hier also Checkstyle bzw. Findbugs Fehler finden, so wird der Build nicht fortgesetzt.
Der Download
Hier nun der Download mit dem Gradle Script und den Checkstyle sowie Findbugs Konfigurationsdateien.