SonarQube und IntelliJ IDEA: Richtige Integration


SonarQube ist ein hervorragendes Tool zur Einführung der statischen Codeanalyse in den Softwareentwicklungsprozess. Es unterstützt sowohl Java, das in unserem Unternehmen verwendet wird, als auch eine große Anzahl anderer Programmiersprachen.


Im Moment ist dieses Tool fest in unser Leben eingedrungen, folgt einem einzigen Codestil und schützt vor einer Vielzahl von Arten von Fehlern. Fehler werden gefunden, wenn auf CI aufgebaut wird oder bevor eine Pull-Anforderung im versionierten Speicher akzeptiert wird. Alle gefundenen Fehler werden in der Weboberfläche angezeigt, wo Sie sie untersuchen und verwalten können.


Das Problem ist jedoch, dass eine praktische webbasierte Oberfläche nicht die Bequemlichkeit bedeutet, Kommentare im Projektcode zu entfernen. Um eine Korrektur vorzunehmen, müssen Sie zuerst prüfen, in welcher Datei sich diese Bemerkung befindet, dann diese Datei öffnen und erst dann eine Korrektur vornehmen. Dies führt auch dazu, dass der Entwickler von einem Problem mit einer sehr großen Verzögerung erfährt (manchmal kann die Analyse in SonarQube mehrere zehn Minuten dauern), was nicht zur Aufrechterhaltung der Reinheit des Codes beiträgt.


Um den Entwicklern unseres Unternehmens mit IntelliJ IDEA das Leben zu erleichtern, habe ich die Anleitung zusammengestellt. Und später erkannte ich, dass es für einen größeren Kreis von Spezialisten nützlich sein könnte, und beschloss, es öffentlich zugänglich zu machen.


Ein paar Worte zu meiner Firma

Da mein Artikel der erste im Unternehmensblog von NPO Krista ist, werde ich ein paar Worte über mein Unternehmen schreiben.


Der Bereich unserer Tätigkeit ist die Informationstechnologie für die Landes- und Kommunalverwaltung. Wir sind besorgt über die Wirksamkeit der Regierungsreformen, die Wirksamkeit der Regierung, die Qualität der öffentlichen Dienstleistungen, die Transparenz der Finanzberichterstattung, die Offenheit der Haushaltsdaten für die Bevölkerung usw.


Die Geschichte des Unternehmens begann in Rybinsk. Touristen besuchen manchmal unsere Stadt und reisen mit dem Boot auf der Wolga. Suchen Sie danach auf der Karte in der Nähe des Stausees Rybinsk. Die moderne Geografie unserer Produktionszentren, Niederlassungen und Repräsentanzen ist viel breiter, aber das Hauptzentrum der NPO „Krista“ befindet sich immer noch in Rybinsk.


Lassen Sie uns zunächst sehen, welche Inspektionen SonarQube im Allgemeinen unterstützt. Dies sind in erster Linie unsere eigenen Inspektionen, die in der Standardlieferung enthalten sind. Darüber hinaus gibt es aber auch Plugins zur Integration mehrerer Analysatoren von Drittanbietern:


  • Checkstyle
  • Spotbugs (früher FindBugs genannt, aber zusammen mit dem Umbenennen des Analysators selbst umbenannt)
  • PMD

Jede einzelne Inspektion kann einzeln konfiguriert und zu Profilen kombiniert werden, sodass Sie eine einzige Reihe von Inspektionen für das gesamte Unternehmen durchführen können. In unserem Hauptprofil sind also mehr als 1200 verschiedene Inspektionen aktiviert. Es ist klar, dass niemand in der Lage ist, so viele Regeln im Kopf zu behalten, was bedeutet, dass nach jeder Phase des Codeschreibens die Phase der Bearbeitung von Kommentaren aus SonarQube folgt. Und je kürzer diese Phase ist, desto weniger schmerzhaft ist sie für den Entwickler. Wie kann es also vereinfacht werden?


Um dieses Problem zu lösen, verfügen verschiedene IDEs über Plugins, mit denen Sie Informationen vom SonarQube-Server extrahieren und direkt im Code-Editor anzeigen können. Im Fall von IntelliJ IDEA ist dies zunächst SonarLint - das offizielle Plugin der Entwickler von SonarQube. Es wird nur ein Profil vom Server mit den Einstellungen der aktiven Inspektionen verwendet, und die Analyse selbst führt einen Raid direkt in der IDE durch. Dies verbessert die Qualität der Entwicklung erheblich, sodass Sie alle neuen Kommentare sofort sehen und schnell korrigieren können. Aber in der Salbe ist eine Fliege. SonarLint arbeitet ausschließlich mit SonarQubes eigenen Inspektionen und ignoriert alle anderen Inspektionen vollständig. Sie sehen keine Kommentare von FindBugs oder von CheckStyle oder PMD. Aber es kann viele wertvolle Informationen enthalten.


Aber nicht verzweifeln: Der SonarQube-Server kann Einstellungen für alle Analysatoren exportieren. Dies bedeutet, dass Standard-IDEA-Plug-Ins so konfiguriert werden können, dass sie ein Ergebnis liefern, das dem des Servers entspricht.


Lassen Sie uns diese Einstellungen der Reihe nach behandeln.


Konfigurieren Sie SonarLint


Hier gibt es keine Tricks. Wir gehen in die IDEA-Einstellungen und im Abschnitt Plugins finden wir das SonarLint- Plugin und installieren es.



Das Plugin verwendet zunächst die Standardeinstellungen für die Überprüfung. Jetzt können Sie zum Plug-In-Fenster gehen und die Verbindung zum SonarQube-Server konfigurieren. Da es besser ist, einmal zu sehen als hundertmal zu lesen, gebe ich nur eine Reihe von Screenshots der Setup-Sequenz. Im Folgenden werden Orte, die Aufmerksamkeit erfordern, rot eingekreist. Dies sind entweder Felder zum Ausfüllen oder Schaltflächen, auf die Sie klicken möchten, oder Flags, die Sie in die angegebene Ansicht bringen möchten:








Die Hauptsache ist, nicht zu vergessen, nach dem Hinzufügen eines neuen Servers auf Update binding aktualisieren zu klicken, damit das Plugin das Profil mit den Einstellungen lädt. Diese Schaltfläche muss immer dann gedrückt werden, wenn sich das Profil auf dem Server ändert (Inspektionen hinzugefügt / entfernt, Einstellungen geändert).


Wenn Sie mehrere Module in einem IDEA-Projekt verbunden haben, müssen Sie in den Einstellungen zu einem bestimmten Modul wechseln, wenn Sie es auf Kommentare analysieren müssen. Dies ist nicht sehr praktisch, aber es ist.


Die Liste der Kommentare wird automatisch im Hintergrund aktualisiert, wenn eine neue Datei geöffnet oder Änderungen an dieser Datei vorgenommen werden. Wenn dieses Verhalten unerwünscht ist, können Sie es dort in den Plugin-Einstellungen deaktivieren.


Ein Beispiel für die Arbeit mit SonarLint finden Sie unten (das Bild kann angeklickt werden):



Wenn etwas schief gelaufen ist

Es gibt Situationen, in denen SonarLint aus irgendeinem Grund die Arbeit verweigert. In diesem Fall können Sie im Fenster von SonarLint selbst zur Registerkarte "Protokoll" gehen und sehen, was passiert ist. Leider sind die Informationen in diesem Protokoll nicht immer klar und ausreichend.


Zum Beispiel habe ich nach der letzten Version von IntelliJ IDEA (2019.2) aufgehört, mit diesem Fehler zu arbeiten:



Es ist sehr informativ ... Und ich konnte nicht herausfinden, wie ich selbst mehr Informationen erhalten kann.


Die Situation wurde durch die FAQ auf der SonarQube- Website gespeichert. Es stellt sich heraus, dass Sie im SonarLint-Fenster in IDEA die Fehlerprotokollierungsstufe ändern können:



Wenn Sie die ausgewählten Elemente auswählen, wird ein detaillierteres Protokoll angezeigt, anhand dessen Sie bereits verstehen können, was passiert:



Ja! Jetzt erschien der Fehler und es wurde klar, was geschah.


Tatsächlich gab es einen unangenehmen Versionskonflikt. Unsere Anwendungen verwenden weiterhin Java 8 und werden auf SonarQube 7.1 getestet. Gleichzeitig ist der gesamte Produktionsprozess an die Funktionen von SonarQube gebunden, um die Fehlerunterschiede zwischen dem Hauptentwicklungszweig und Pull Request zu analysieren.


Das Unangenehmste ist jedoch, dass diese Funktion seit SonarQube 7.2 bezahlt wurde, weshalb wir immer noch nicht auf die neueste Version aktualisiert haben. Die Unterstützung für Java 11 wurde nur in SonarQube 7.3 implementiert.


Ein weiterer wichtiger Punkt ist, dass das SonarLint-Plugin bei der Analyse des Codes den Quellcode mithilfe der JRE kompiliert, auf der IntelliJ IDEA ausgeführt wird. Während IDEA an Java 8 arbeitete, war bei uns alles in Ordnung. Bei der Umstellung auf Java 11 in Version 2019.2 fiel jedoch alles auseinander, da tatsächlich eine Kompilierung in Java 11-Bytecode ( Klassendatei Hauptversion 55 ) erfolgt und diese anhand der auf dem Server installierten Version des Analysators analysiert wird. T. d.h. dieses Bytecode-Format wird nicht unterstützt. Und das ist ein bekanntes Problem .


Anscheinend müssen Sie dringend nach Möglichkeiten suchen, um SonarQube auf die neueste Version zu aktualisieren. Möglicherweise verwenden Sie ein Plugin eines Drittanbieters, das sonarqube-community-branch-plugin bietet und die Funktionen bietet, die wir benötigen.


Herunterladen der Analyseeinstellungen von SonarQube


Jedes der Plugins außer SonarLint benötigt eigene Konfigurationsdateien, jedes in seinem eigenen Format. Glücklicherweise kann SonarQube diese Dateien herunterladen. Sie befinden sich im Fenster mit den Einstellungen für das Analyseprofil.


Um dorthin zu gelangen, müssen Sie im Abschnitt Quality Profile der Weboberfläche des SonarQube-Servers das Profil auswählen, das zur Analyse des Projekts verwendet wird:



Auf der sich öffnenden Seite wird ein Abschnitt angezeigt, der Links zum Exportieren von Einstellungen für jeden der Analysatoren enthält:



Die Einstellungen für FindBugs und PMD müssen mit der XML Erweiterung auf eine lokale Festplatte hochgeladen werden. Die Einstellungen für CheckStyle können jedoch direkt über die URL der Site verwendet werden.


Konfigurieren Sie CheckStyle


In IDEA heißt das Plugin CheckStyle-IDEA . Dies ist möglicherweise das problemloseste Plugin in Bezug auf die Verwendung, da Sie Einstellungen direkt per URL laden können und nicht zwischen Modulen wie SonarLint wechseln müssen.


Um die Konfiguration zu verbinden, gehen Sie zu den IDEA-Einstellungen und wählen Sie den Abschnitt CheckStyle . Als Nächstes müssen Sie der Tabelle " Configuration File ein neues Element hinzufügen:



Und geben Sie die Quelle der Konfiguration an:



Vergessen Sie auch nicht, die neu hinzugefügte Konfiguration in der Einstellungsfenstertabelle als aktiv zu markieren.


Jetzt können Sie zum CheckStyle-Fenster gehen und die Analyse starten (die oben ausgewählte Schaltfläche):



Wenn sich das Profil auf dem SonarQube-Server geändert hat, müssen Sie die Einstellungen aktualisieren, indem Sie auf die entsprechende Schaltfläche im selben Fenster klicken (die unten markierte Schaltfläche).


Wenn etwas schief gelaufen ist

Im Falle des Fehlers "Die Checkstyle-Regeldatei konnte nicht analysiert werden", nämlich "SuppressionCommentFilter ist als untergeordnetes Element in Checker nicht zulässig", müssen Sie die Version von Checkstyle in den Plugin-Einstellungen verringern, die auf dem SonarQube-Server verwendet werden. Die Versionskonformität finden Sie in der Tabelle in der Beschreibung des Checkstyle-Plugins für SonarQube.


Einrichten von FindBugs


In IDEA heißt das Plugin FindBugs-IDEA . Im Gegensatz zu den zuvor getesteten Plugins kann dieses keine Einstellungen direkt vom Server übernehmen und erfordert eine lokale Datei.


Um die Konfiguration zu verbinden, gehen Sie zu den IDEA-Einstellungen und wählen Sie den Abschnitt FindBugs-IDEA . Fügen Sie als Nächstes auf der Registerkarte Filter ein neues Element zur Tabelle Include filter files :



Das Plugin ist einsatzbereit. In seinem Fenster können Sie die Analyse einer einzelnen Datei sowie des gesamten Projekts oder eines anderen Fischadlers starten, aus dem Sie auswählen können:



Wichtiger Hinweis 1: In den Plugin-Einstellungen befindet sich eine Registerkarte Freigeben, auf der vorgeschlagen wird, die SonarQube-Einstellungsdatei zu verbinden. Ich empfehle diese Einstellung nicht, da sie nicht richtig funktioniert hat, aber die Konsequenzen werden nicht trivial behandelt. Tatsache ist, dass das Löschen dieser Einstellung nicht funktioniert hat. Das Plugin hat nicht normal funktioniert. Um die Arbeit wiederherzustellen, musste ich die .idea/findbugs-idea.xml im Projektverzeichnis löschen und alles neu konfigurieren.


Wichtiger Hinweis 2: Wenn sich die Einstellungen auf dem SonarQube-Server geändert haben, müssen Sie sie erneut auf die Festplatte hochladen.


Wichtiger Hinweis 3: Leider ist die Entwicklung dieses Plugins ins Stocken geraten, nachdem die Entwicklung von FindBugs selbst auf den SpotBugs-Zweig übertragen wurde. Im JetBrains-Bugtracker gibt es ein Ticket zu diesem Thema. Wenn Sie also zusammen mit uns die volle Unterstützung für alle SonarQube-Kommentare direkt zu Hause in Ihrer Lieblings-IDE wünschen, können Sie für dieses Ticket stimmen. Vielleicht bewegt sich der Wagen.


PMD-Setup


In IDEA heißt das Plugin PMDPlugin. Ähnlich wie bei FindBugs erfordert dieses Plugin eine Einstellungsdatei auf der Festplatte. Gehen Sie zum Konfigurieren zu den IDEA-Einstellungen und fügen Sie die von SonarQube heruntergeladene Datei hinzu:



Der Dateiname spielt eine wichtige Rolle, da er in Zukunft vom Plugin verwendet wird, um den entsprechenden Menüpunkt zum Starten der Analyse zu bilden.


Auch im benachbarten Beitrag müssen Sie die Java-Version angeben, die das Projekt verwendet (also gleichzeitig die Codierung):



Jetzt können Sie die Analyse der aktuellen Datei über das Kontextmenü starten:


 Run PMD->Custom Rules-><  > 

Wichtiger Hinweis 1: PMD kann auch über das Hauptmenü gestartet werden. Dies wird jedoch nicht empfohlen, da in diesem Fall nicht eine Datei gescannt wird, sondern das gesamte Projekt in der IDE geöffnet wird. Dies kann viel Zeit in Anspruch nehmen und das System erheblich überlasten.


Wichtiger Hinweis 2: Wie FindBugs benötigt PMD eine Konfigurationsdatei auf der Festplatte. Daher müssen Sie es jedes Mal aktualisieren, wenn sich die SonarQube-Profileinstellungen ändern.


Fazit


Zusammenfassend stelle ich Folgendes fest. Trotz der Tatsache, dass Sie die Einstellungen von bis zu 4 Plugins verwalten müssen, um Kommentare zu verfolgen, ist es immer noch besser, jedes Mal darauf zu warten, dass die Bearbeitungsergebnisse auf dem SonarQube-Server angezeigt werden, und Sie können sofort einen saubereren Code festschreiben.


Ich hoffe, dass die hier präsentierten Informationen jemandem helfen, sich leichter mit statischen Analysegeräten im Allgemeinen und mit SonarQube im Besonderen anzufreunden.


Ich möchte auch meinen Kollegen danken, die mir geholfen haben, die Relevanz dieses Artikels zu schreiben und zu unterstützen: Dmitry Zimichev, Yuri Krupin und Artyom Ganev.

Source: https://habr.com/ru/post/de469963/


All Articles