Code Metriken auswerten mit Sonar
20.8.2009 | 2 Minuten Lesezeit
Code Metriken sind ein Bestandteil der Qualitätskontrolle für Software-Projekte. Jeder hat vermutlich auch bereits einmal Tools wie Cobertura , FindBugs oder auch Checkstyle eingesetzt.
Sonar vereint die Funktionen dieser (und weiterer) Tools zur statischen Code-Analyse unter einem Dach und bietet eine komfortable Web-Oberfläche zur Auswertung der gesammelten Statistiken an.
Sonar lässt sich sicherlich am Einfachsten mit Maven integrieren, wenn man erstmal die initialen Probleme mit dem Maven-Plugin überwunden hat (siehe Kasten). Es werden aber auch andere Build-Systeme unterstützt. Auch wird Hudson durch ein eigenes Sonar-PlugIn unterstützt. Es ist jedoch auch problemlos möglich Sonar als „Freestyle“-Projekt in Hudson zu integrieren, was den Vorteil hat, dass man dann einen eigenen Schedule wählen kann. Somit werden natürlich auch andere CI-Systeme (Continuous Integration) unterstützt. Im folgenden Kasten wird erläutert, wie Sonar von der Kommandozeile für ein existierendes Maven-Projekt gestartet werden kann.
Bei dem Versuch Sonar erstmalig in einem Maven-Projekt in Benutzung zu nehmen erscheint nur die folgende Fehlermeldung:
The plugin ‚org.apache.maven.plugins:maven-sonar-plugin‘ does not exist or no valid version could be found
POM ‚org.codehaus.sonar:sonar-maven-plugin‘ not found in repository: Unable to download the artifact from any repository
Keine der im Netz gefundenen Lösungsvorschläge für dieses Problem hat bei mir funktioniert (z.B. das Löschen von org/codehaus/mojo im lokalen Maven Repository). Die Lösung brachte – nach einigem Suchen – die folgende Zeile in dem pom.xml-File des entsprechenden Projekts, mit dem das Sonar-Plugin explizit eingebunden wird:
org.codehaus.sonar
sonar-maven-plugin
1.8
Danach werden bei einem Aufruf des Sonar-Ziels unter Maven alle benötigten Artefakte heruntergeladen bis auf stax2-api. Dieses musste ich manuell herunterladen und mittels:
mvn install:install-file -DgroupId=org.codehaus.woodstox -DartifactId=stax2-api -Dversion=3.0.1 -Dpackaging=jar -Dfile=
zum Maven-Repository hinzufügen. Danach kann Sonar unter Maven für das entsprechende Projekt wie folgt gestartet werden:
mvn -e -B -f sonar:sonar
Dies setzt nur voraus, dass bereits ein Maven-install für dieses Projekt gelaufen ist. Alternativ können natürlich auch alle Maven-Ziele in einem Aufruf kombiniert werden.
Sonar läuft als eigener Web-Server und sollte an eine Enterprise-Datenbank angebunden werden. Es wird empfohlen die integrierte Derby-Datenbank nur für Evaluierungszwecke zu nutzen. Die Details der Sonar System-Anforderungen finden sich hier.
Einmal installiert bietet Sonar einen echten Mehrwert. Durch die Aggregation der verschiedenen Analyse-Tools unter einer Oberfläche bekommt man sehr schnell einen Überblick über potentielle Probleme im Code. Auch lassen sich verschiedene Profile erzeugen, die mit individuellen Projekten verknüpft werden können. Eigene Profile können am Besten als Kopie eines der drei vorgefertigten Profile erstellt werden.
Für mich ist Sonar eine uneingeschränkte Empfehlung wert. Die einfache Integration in Maven und Hudson (oder andere CI-Systeme) sind ein grosser Pluspunkt. Die Weboberfläche bereitet die Informationen ansprechend auf und erleichtert das schnelle Auffinden potentieller Probleme. Die komfortable Anpassung der Regeln über die Weboberfläche rundet das positive Bild ab.
Weitere Beiträge
von Thomas Jaspers
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Thomas Jaspers
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.