SonarQube ist eine Server-Anwendung, mit der die Qualität des Codes von Software-Projekten überprüft werden kann.
Dabei werden viele Programmiersprachen unterstützt und es gibt für jede Sprache ein große Anzahl an
Regeln, die überprüft werden. Regeln können dabei auch deaktiviert werden.
Ich will dieses Tool einsetzen, um meine Java-Projekte (JFXLibrary, JInfoViz und ThemeRiver) schrittweise
auch von der Code-Qualität zu verbessern.
Ich habe SonarQube auf Ubuntu Linux installiert und bin dabei folgendermaßen vorgegangen.
sonarqube-8.5.1.38104.zip
und in das entpackte Verzeichnis navigieren.
bin/linux-x86-64
den Befehl ./sonar.sh start
ausführen.
http://localhost:9000
aufrufen.
Wenn man mit der Analyse auf SonarQube fertig ist, kann man den Server wieder stoppen, in dem man im Terminal
./sonar.sh stop
ausführt.
Da meine Projekte keine Maven-Projekte sind, sondern mit Ant kompiliert und gestartet werden, brauchte ich keine Projekte am SonarQube Server anlegen, sondern ging wie folgt vor:
SonarScanner for Ant
suchen. Ich bin dann auf folgende Seite gekommen:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-ant/.
sonarqube-ant-task-2.7.0.1612.jar
herunterladen.
SonarAnalyze
heißt und darunter den Unterordner sonar
.
In diesen habe ich die Datei sonarqube-ant-task-2.7.0.1612.jar
kopiert.
In weiterer Folge legte ich für jedes meiner Projekte eine Datei an mit dem Namen build.xml_<ProjektName>
.
Diese Dateien hatten folgenden Inhalt:
[ProjektName] <property name="sonar.host.url" value="http://localhost:9000" /> <property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" /> <property name="sonar.projectName" value="[ProjektName]" /> <property name="sonar.projectVersion" value="1.0" /> <property name="sonar.sources" value="[ProjektName]/src" /> <property name="sonar.java.binaries" value="[ProjektName]/build" /><classpath path="sonar/sonarqube-ant-task-2.7.0.1612.jar" /> <sonar:sonar />
Die Property
<property name="sonar.java.libraries" value="lib/*.jar" />
musste ich entfernen, weil ich keine *.jar-Dateien habe, die ich referenziere und somit kam bei der Analyse die
Exception java.lang.IllegalStateException: No files nor directories matching 'lib/*.jar'
.
Leider konnte ich in meiner bestehenden Konfiguration die Analyse nicht auf den SVN Checkouts durchführen, weil
SonarQube SVN erkannt hat, und BLAME-Informationen abrufen wollte, die aber bei meiner Konfiguration nicht unterstützt
wurden. Es kam daher bei mir immer der Fehler
java.lang.IllegalStateException: Error when executing blame for file
Caused by: org.tmatesoft.svn.core.SVNException: svn: E200007: Retrieval of mergeinfo unsupported by
In weiterer Folge habe ich mir ein Skript für jedes Projekt geschrieben, das folgende Schritte ausführt:
rm -r <ProjektName&rt;
mkdir <ProjektName&rt;
cd <ProjektName&rt;
svn export <Repository&rt;
ant compile
cd ..
build.xml_<ProjektName>
zur build.xml
kopieren:
cp build.xml_<ProjektName> build.xml
ant sonar
Nachdem alles eingerichtet worden ist, braucht man dann nur noch folgende Schritte durchführen, um die SonarQube-Analysen der Projekte zu aktualisieren.
bin/linux-x86-64
den Befehl ./sonar.sh start
ausführen.
bin/linux-x86-64
den Befehl ./sonar.sh stop
ausführen.
Bei meiner Community Version von SonarQube wird immer nur die letzte Analyse angezeigt und es sieht für mich auch so aus, als könnte ich keinen automatisierten Bericht rausschreiben. Daher habe ich mir im nächsten Abschnitt Gedanken darüber gemacht, wie ich den Fortschritt der Code-Qualität meiner Projekte am besten aufzeichne.
Ich habe mir eine Excel-Datei (hier zum Download) erstellt.
Diese besteht aus zwei Arbeitsblättern. Auf dem ersten Namens
Daten
habe ich für jede Analyse eine Zeile eingetragen mit einem Datum. In den Spalten befinden
sich die Werte, der für mich wichtigen Daten. Im zweiten Arbeitsblatt namens Differenzen
befinden sich für jeden Wert die Differenz zwischen zwei aufeinanderfolgenden Analysen. Wurden die Werte schlechter
so sind sie rot eingezeichnet.
Im folgenden noch eine kurze Aufstellung der Spalten:
Duplicated Blocks
klickt, so kann man links unter
Size
den Eintrag Lines of code
finden.
Duplicated Blocks
klickt, so kann man links unter
Duplications
den Eintrag Duplicated LInes
finden.