Einführung in CheckStyle

Einführung in CheckStyle

1. Überblick

Checkstyle ist ein Open Source-Tool, das Code anhand eines konfigurierbaren Regelsatzes überprüft.

In diesem Tutorial werden wir unshow to integrate Checkstyle into a Java project via Maven and by using IDE plugins. ansehen

Die in den folgenden Abschnitten genannten Plugins sind nicht voneinander abhängig und können einzeln in unseren Build oder unsere IDEs integriert werden. Beispielsweise wird das Maven-Plugin in unserenpom.xmlnicht benötigt, um die Validierungen in unserer Eclipse-IDE auszuführen.

2. Checkstyle Maven Plugin

2.1. Maven-Konfiguration

Um Checkstyle zu einem Projekt hinzuzufügen, müssen wir das Plugin im Berichtsabschnitt von apom.xml hinzufügen:


    
        
            org.apache.maven.plugins
            maven-checkstyle-plugin
            3.0.0
            
                checkstyle.xml
            
        
    

This plugin comes with two predefined checks, a Sun-style check, and a Google-style check. Die Standardprüfung für ein Projekt istsun_checks.xml.

Um unsere benutzerdefinierte Konfiguration zu verwenden, können wir unsere Konfigurationsdatei wie im obigen Beispiel angegeben. Wenn Sie diese Konfiguration verwenden, liest das Plugin jetzt unsere benutzerdefinierte Konfiguration anstelle der Standardkonfiguration.

Die neueste Version des Plugins finden Sie unterMaven Central.

2.2. Berichterstellung

Nachdem unser Maven-Plugin konfiguriert ist, können wir einen Bericht für unseren Code erstellen, indem wir den Befehlmvn siteausführen. Once the build finishes, the report is available in the target/site folder under the name checkstyle.html.

Ein Checkstyle-Bericht besteht aus drei Hauptteilen:

Files: Dieser Abschnitt des Berichts enthältthe list of files in which the violations have happened. Es zeigt uns auch die Anzahl der Verstöße gegen deren Schweregrad. So sieht der Dateibereich des Berichts aus:

image

Rules: Dieser Teil des Berichts gibt unsoverview of the rules that were used to check for violations. Es zeigt die Kategorie der Regeln, die Anzahl der Verstöße und die Schwere dieser Verstöße. Hier ist ein Beispiel des Berichts, der den Abschnitt mit den Regeln enthält:

image

Details: Schließlich enthält der Detailabschnitt des Berichts diedetails of the violations that have happened. Die angegebenen Details sind auf Zeilennummernebene. Hier ist ein Abschnitt mit Beispieldetails des Berichts:

image

2.3. Integration erstellen

Wenn der Codierungsstil streng überprüft werden muss,we can configure the plugin in such a way that the build fails when the code doesn’t adhere to the standards.

Dazu fügen wir unserer Plugin-Definition ein Ausführungsziel hinzu:


    org.apache.maven.plugins
    maven-checkstyle-plugin
    ${checkstyle-maven-plugin.version}
    
        checkstyle.xml
    
    
        
            
                check
            
        
    

Das AttributconfigLocation definiert, auf welche Konfigurationsdatei für die Validierungen verwiesen werden soll.

In unserem Fall lautet die Konfigurationsdateicheckstyle.xml.. Das im Ausführungsabschnitt erwähnte Zielcheck fordert das Plugin auf, in der Überprüfungsphase des Builds ausgeführt zu werden, und erzwingt einen Buildfehler, wenn ein Verstoß gegen Codierungsstandards auftritt.

Wenn wir nun den Befehlmvn clean installausführen, werden die Dateien auf Verstöße überprüft, und der Build schlägt fehl, wenn Verstöße festgestellt werden.

Wir können auch nur dascheck-Ziel des Plugins mitmvn checkstyle:check, ausführen, ohne das Ausführungsziel zu konfigurieren. Das Ausführen dieses Schritts führt ebenfalls zu einem Build-Fehler, wenn Überprüfungsfehler vorliegen.

3. Eclipse Plugin

3.1. Konfigurationen

Genau wie bei der Maven-Integration können wir mit Eclipse unsere benutzerdefinierte Konfiguration verwenden.

Um unsere Konfiguration zu importieren, gehen Sie zuWindow → Preferences → Checkstyle.. Klicken Sie im AbschnittGlobal Check Configurations aufNew.

Daraufhin wird ein Dialogfeld geöffnet, in dem Sie die Möglichkeit haben, unsere benutzerdefinierte Konfigurationsdatei anzugeben.

3.2. Durchsuchen von Berichten

Jetzt, da unser Plugin konfiguriert ist, können wir es verwenden, um unseren Code zu analysieren.

Um den Codierungsstil für ein Projekt zu überprüfen, klicken Sie mit der rechten Maustaste auf das Projekt inEclipse Project Explorer und wählen SieCheckStyle → Check Code with Checkstyle. aus

The plugin will give us feedback on our Java code within the Eclipse, text editor. Es wird auch der Verstoßbericht für das Projekt generiert, der als Ansicht in Eclipse verfügbar ist.

Um den Verstoßbericht anzuzeigen, gehen Sie zuWindow → Show View → Other und suchen Sie nach Checkstyle. Optionen fürViolations undViolations Chart sollten angezeigt werden.

Wenn Sie eine der beiden Optionen auswählen, werden Verstöße nach Typ gruppiert dargestellt. Hier ist das Kreisdiagramm für Verstöße gegen ein Beispielprojekt:

image

Wenn Sie auf einen Abschnitt des Kreisdiagramms klicken, gelangen Sie zur Liste der tatsächlichen Verstöße im Code.

Alternativ können wir dieProblem-Ansicht der Eclipse-IDE öffnen und die vom Plugin gemeldeten Probleme überprüfen.

Hier ist ein Beispiel für eine Problemansicht von Eclipse IDE:

image

Wenn Sie auf eine der Warnungen klicken, gelangen Sie zu dem Code, in dem der Verstoß aufgetreten ist.

4. IntelliJ IDEA Plugin

4.1. Aufbau

Wie Eclipse können wir mit IntelliJ IDEA auch eigene benutzerdefinierte Konfigurationen für ein Projekt verwenden.

Öffnen Sie in der IDE Einstellungen und suchen Sie nach Checkstyle. Es wird ein Fenster angezeigt, in dem Sie unsere Schecks auswählen können. Klicken Sie auf die Schaltfläche+. Ein Fenster wird geöffnet, in dem Sie den Speicherort der zu verwendenden Datei angeben können.

Nun wählen wir eine XML-Konfigurationsdatei aus und klicken auf Weiter. Dadurch wird das vorherige Fenster geöffnet und unsere neu hinzugefügte benutzerdefinierte Konfigurationsoption angezeigt. Wir wählen die neue Konfiguration aus und klicken auf OK, um sie in unserem Projekt zu verwenden.

4.2. Durchsuchen von Berichten

Nachdem unser Plugin konfiguriert ist, können Sie es verwenden, um nach Verstößen zu suchen. Um nach Verstößen gegen ein bestimmtes Projekt zu suchen, gehen Sie zuAnalyze → Inspect Code.

The Inspections Results will give us a view of the violations under the Checkstyle section. Hier ist ein Beispielbericht:

image

Wenn Sie auf die Verstöße klicken, gelangen Sie zu den genauen Zeilen in der Datei, in der die Verstöße aufgetreten sind.

5. Benutzerdefinierte Checkstyle-Konfiguration

Im Abschnitt zur Generierung von Maven-Berichten (Abschnitt 2.2) haben wir eine benutzerdefinierte Konfigurationsdatei verwendet, um unsere eigenen Codierungsstandardprüfungen durchzuführen.

We have a way to create our own custom configuration XML file, wenn wir die verpackten Google- oder Sun-Schecks nicht verwenden möchten.

Hier ist die benutzerdefinierte Konfigurationsdatei, die für die obigen Überprüfungen verwendet wird:



    
        
            
        
    

5.1. DOCTYPE Definition

Die erste Zeile des d.h. Die DOCTYPE-Definition ist ein wichtiger Teil der Datei und gibt an, wo die DTD heruntergeladen werden muss, damit das System die Konfigurationen verstehen kann.

Wenn wir diese Definition nicht in unsere Konfigurationsdatei aufnehmen, ist sie keine gültige Konfigurationsdatei.

5.2. Module

Eine Konfigurationsdatei besteht hauptsächlich aus Modulen. A module has an attribute name which represents what the module does. Der Wert des Attributsname entspricht einer Klasse im Plugin-Code, die ausgeführt wird, wenn das Plugin ausgeführt wird.

Erfahren Sie mehr über die verschiedenen Module in der obigen Konfiguration.

5.3. Moduldetails

  • Checker: Module sind in einem Baum strukturiert, in dem sich das Checker-Modul im Stammverzeichnis befindet. Dieses Modul definiert die Eigenschaften, die von allen anderen Modulen der Konfiguration geerbt werden.

  • TreeWalker: Dieses Modul überprüft die einzelnen Java-Quelldateien und definiert Eigenschaften, die für die Überprüfung solcher Dateien gelten.

  • AvoidStarImport: Dieses Modul setzt einen Standard für die Nichtverwendung von Star-Importen in unserem Java-Code. Es hat auch eine Eigenschaft, die das Plugin auffordert, den Schweregrad solcher Probleme als Warnung zu melden. Wenn also solche Verstöße im Code gefunden werden, wird eine Warnung vor ihnen angezeigt.

Um mehr über benutzerdefinierte Konfigurationen zu erfahren, folgen Sie diesenlink.

6. Berichtsanalyse für das Spring-Rest-Projekt

In diesem Abschnitt werden wir eine Analyse von Checkstyle anhand der in Abschnitt 5 erstellten benutzerdefinierten Konfiguration anhand derspring-rest project available on GitHub als Beispiel beleuchten.

6.1. Erstellung von Verstößen

Wir haben die Konfiguration in die Eclipse-IDE importiert. Hier ist der Verstoßbericht, der für das Projekt generiert wird:

image

Die hier gemeldeten Warnungen besagen, dass Platzhalterimporte im Code vermieden werden sollten. Wir haben zwei Dateien, die diesem Standard nicht entsprechen. Wenn wir auf die Warnung klicken, gelangen wir zu der Java-Datei, die die Verletzung aufweist.

In der DateiHeavyResourceController.javawird die gemeldete Warnung folgendermaßen angezeigt:

image

6.2. Konfliktlösung

Die Verwendung von Star-Importen ist im Allgemeinen keine bewährte Methode, da Konflikte auftreten können, wenn zwei oder mehr Pakete dieselbe Klasse enthalten.

Betrachten Sie als Beispiel die KlasseList,, dieis in den Paketenjava.util undjava.awt verfügbar sind. Wenn wir beide Importe vonjava.util. * Undjava.awt.* verwenden, kann unser Compiler den Code nicht kompilieren, daList in beiden Paketen verfügbar ist.

To resolve the issue mentioned above we organize the imports in both files and save them. Wenn wir das Plugin erneut ausführen, werden die Verstöße nicht angezeigt und unser Code folgt nun den in unserer benutzerdefinierten Konfiguration festgelegten Standards.

7. Fazit

In diesem Artikel haben wir die Grundlagen für die Integration von Checkstyle in unser Java-Projekt behandelt.

Wir haben erfahren, dass es sich um ein einfaches, aber leistungsstarkes Tool handelt, mit dem sichergestellt wird, dass Entwickler die von der Organisation festgelegten Codierungsstandards einhalten.

Der Beispielcode, den wir für die statische Analyse verwendet haben, ist verfügbarover on GitHub.