Inleiding tot CheckStyle

1. Overzicht

Checkstyle is een open source tool die code controleert aan de hand van een configureerbare set regels.

In deze tutorial gaan we kijken naar hoe Checkstyle te integreren in een Java-project via Maven en door IDE-plug-ins te gebruiken.

De plug-ins die in onderstaande secties worden genoemd, zijn niet afhankelijk van elkaar en kunnen afzonderlijk worden geïntegreerd in onze build of IDE's. De Maven-plug-in is bijvoorbeeld niet nodig in onze pom.xml om de validaties uit te voeren in onze Eclipse IDE.

2. Checkstyle Maven-plug-in

2.1. Maven-configuratie

Om Checkstyle aan een project toe te voegen, moeten we de plug-in toevoegen in het rapportagedeelte van een pom.xml:

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

Deze plug-in wordt geleverd met twee vooraf gedefinieerde controles, een controle in Sun-stijl en een controle in Google-stijl. De standaardcontrole voor een project is sun_checks.xml.

Om onze aangepaste configuratie te gebruiken, kunnen we ons configuratiebestand specificeren zoals weergegeven in het bovenstaande voorbeeld. Met behulp van deze configuratie leest de plug-in nu onze aangepaste configuratie in plaats van de standaard opgegeven configuratie.

De nieuwste versie van de plug-in is te vinden op Maven Central.

2.2. Rapport genereren

Nu onze Maven-plug-in is geconfigureerd, kunnen we een rapport voor onze code genereren door het mvn-site opdracht. Zodra de build is voltooid, is het rapport beschikbaar in het doel / site map onder de naam checkstyle.html.

Een Checkstyle-rapport bestaat uit drie hoofdonderdelen:

Bestanden: Dit gedeelte van het rapport geeft ons de lijst met bestanden waarin de overtredingen hebben plaatsgevonden. Het toont ons ook de tellingen van de overtredingen ten opzichte van hun ernstniveau. Hier ziet u hoe de bestandensectie van het rapport eruit ziet:

Reglement: Dit deel van het rapport geeft ons een overzicht van de regels die zijn gebruikt om te controleren op overtredingen. Het toont de categorie van de regels, het aantal overtredingen en de ernst van die overtredingen. Hier is een voorbeeld van het rapport met de regelsectie:

Details: Ten slotte biedt het detailgedeelte van het rapport ons de details van de overtredingen die hebben plaatsgevonden. De verstrekte gegevens zijn op regelnummerniveau. Hier is een gedeelte met voorbeelddetails van het rapport:

2.3. Bouw integratie

Als er strenge controles op de coderingsstijl nodig zijn, we kunnen de plug-in zo configureren dat de build mislukt als de code niet aan de standaarden voldoet.

We doen dit door een uitvoeringsdoel toe te voegen aan onze plug-in-definitie:

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

De configLocation attribuut definieert naar welk configuratiebestand verwezen moet worden voor de validaties.

In ons geval is het configuratiebestand checkstyle.xml. Het doel controleren genoemd in de uitvoeringssectie vraagt ​​de plug-in om in de verificatiefase van de build uit te voeren en dwingt een build-fout af wanneer een overtreding van coderingsstandaarden optreedt.

Als we nu het mvn schone installatie commando, het scant de bestanden op overtredingen en de build zal mislukken als er overtredingen worden gevonden.

We kunnen ook alleen het controleren doel van de plug-in met mvn checkstyle: check, zonder het uitvoeringsdoel te configureren. Als u deze stap uitvoert, zal het bouwen ook mislukken als er validatiefouten zijn.

3. Eclipse-plug-in

3.1. Configuraties

Net als bij de Maven-integratie, stelt Eclipse ons in staat om onze aangepaste configuratie te gebruiken.

Ga naar om onze configuratie te importeren Venster -> Voorkeuren -> Controlestijl. Bij de Globale configuraties controleren sectie, klik op Nieuw.

Dit opent een dialoog die ons opties geeft om ons aangepaste configuratiebestand te specificeren.

3.2. Rapporten browsen

Nu onze plug-in is geconfigureerd, kunnen we deze gebruiken om onze code te analyseren.

Om de coderingsstijl voor een project te controleren, klikt u met de rechtermuisknop op het project in het Eclipse Projectverkenner en selecteer CheckStyle -> Controleer code met Checkstyle.

De plug-in geeft ons feedback over onze Java-code in de Eclipse-teksteditor. Het genereert ook het overtredingsrapport voor het project dat beschikbaar is als weergave in Eclipse.

Ga naar om het overtredingsrapport te bekijken Venster -> Toon weergave -> Andereen zoek naar Checkstyle. Opties voor Overtredingen en Overtredingen Chart moet worden weergegeven.

Als u een van beide opties selecteert, krijgen we een weergave van overtredingen, gegroepeerd op type. Hier is het overtredingcirkeldiagram voor een voorbeeldproject:

Door op een gedeelte van het cirkeldiagram te klikken, komen we bij de lijst met daadwerkelijke overtredingen in de code.

Als alternatief kunnen we het Probleem weergave van Eclipse IDE en controleer de problemen die door de plug-in worden gemeld.

Hier is een voorbeeld van een probleemweergave van Eclipse IDE:

Als u op een van de waarschuwingen klikt, gaan we naar de code waar de overtreding heeft plaatsgevonden.

4. IntelliJ IDEA-plug-in

4.1. Configuratie

Net als Eclipse stelt IntelliJ IDEA ons ook in staat om onze eigen aangepaste configuraties te gebruiken bij een project.

Open Instellingen in de IDE en zoek naar Checkstyle. Er wordt een venster weergegeven met de optie om onze cheques te selecteren. Klik op de + knop en er wordt een venster geopend waarin we de locatie van het te gebruiken bestand kunnen specificeren.

Nu selecteren we een XML-configuratiebestand en klikken op Volgende. Dit opent het vorige venster en toont onze nieuw toegevoegde aangepaste configuratie-optie. We selecteren de nieuwe configuratie en klikken op OK om deze in ons project te gebruiken.

4.2. Rapporten browsen

Nu onze plug-in is geconfigureerd, kunnen we deze gebruiken om te controleren op overtredingen. Ga naar om te controleren op overtredingen van een bepaald project Analyseer -> Inspecteer code.

De inspectieresultaten geven ons een overzicht van de overtredingen onder de sectie Checkstyle. Hier is een voorbeeldrapport:

Als u op de overtredingen klikt, gaan we naar de exacte regels in het bestand waar de overtredingen zijn opgetreden.

5. Aangepaste configuratie van controlestijl

In de sectie Maven-rapportgeneratie (Paragraaf 2.2) hebben we een aangepast configuratiebestand gebruikt om onze eigen coderingsstandaardcontroles uit te voeren.

We hebben een manier om ons eigen aangepaste XML-configuratiebestand te maken als we de verpakte Google- of Sun-cheques niet willen gebruiken.

Hier is het aangepaste configuratiebestand dat wordt gebruikt voor bovenstaande controles:

5.1. DOCTYPE-definitie

De eerste regel van de d.w.z. de DOCTYPE-definitie is een belangrijk onderdeel van het bestand en geeft aan waar de DTD moet worden gedownload, zodat de configuraties door het systeem kunnen worden begrepen.

Als we deze definitie niet opnemen in ons configuratiebestand, is dit geen geldig configuratiebestand.

5.2. Modules

Een configuratiebestand bestaat voornamelijk uit modules. Een module heeft een attribuut naam wat staat voor wat de module doet. De waarde van de naam attribuut komt overeen met een klasse in de plug-in-code die wordt uitgevoerd wanneer de plug-in wordt uitgevoerd.

Laten we leren over de verschillende modules die aanwezig zijn in de bovenstaande configuratie.

5.3. Module Details

  • Checker: Modules zijn gestructureerd in een boomstructuur met de Checker-module als root. Deze module definieert de eigenschappen die worden overgenomen door alle andere modules van de configuratie.
  • TreeWalker: Deze module controleert de individuele Java-bronbestanden en definieert eigenschappen die van toepassing zijn op het controleren van dergelijke bestanden.
  • VermijdStarImport: Deze module stelt een standaard voor het niet gebruiken van Star-imports in onze Java-code. Het heeft ook een eigenschap die de plug-in vraagt ​​om de ernst van dergelijke problemen als een waarschuwing te melden. Dus telkens wanneer dergelijke schendingen in de code worden gevonden, zal er een waarschuwing tegen hen worden gemarkeerd.

Volg deze link om meer te lezen over aangepaste configuraties.

6. Rapportanalyse voor het Spring-Rest Project

In deze sectie gaan we wat licht werpen op een analyse die is uitgevoerd door Checkstyle, met behulp van de aangepaste configuratie gemaakt in sectie 5 hierboven, op het spring-rest-project dat als voorbeeld beschikbaar is op GitHub.

6.1. Overtredingsrapport genereren

We hebben de configuratie geïmporteerd in Eclipse IDE en hier is het overtredingsrapport dat voor het project wordt gegenereerd:

De waarschuwingen die hier worden gemeld, zeggen dat import van jokertekens in de code moet worden vermeden. We hebben twee bestanden die niet aan deze norm voldoen. Als we op de waarschuwing klikken, gaan we naar het Java-bestand met de overtreding.

Hier is hoe de HeavyResourceController.java bestand toont de gerapporteerde waarschuwing:

6.2. Probleemoplossing

Het gebruik van Star-import is in het algemeen geen goede gewoonte, omdat het conflicten kan veroorzaken wanneer twee of meer pakketten dezelfde klasse bevatten.

Beschouw als voorbeeld de klas Lijst, welke is verkrijgbaar in pakketten java.util en java.awt beide. Als we zowel de invoer van java.util . * en java.awt. * onze compiler kan de code niet compileren, zoals Lijst is verkrijgbaar in beide pakketten.

Om het bovengenoemde probleem op te lossen, organiseren we de invoer in beide bestanden en slaan we ze op. Wanneer we de plug-in nu opnieuw uitvoeren, zien we de overtredingen niet en onze code volgt nu de normen die zijn ingesteld in onze aangepaste configuratie.

7. Conclusie

In dit artikel hebben we de basisprincipes besproken voor het integreren van Checkstyle in ons Java-project.

We hebben geleerd dat het een eenvoudige maar krachtige tool is die wordt gebruikt om ervoor te zorgen dat ontwikkelaars zich houden aan de coderingsnormen die door de organisatie zijn vastgesteld.

De voorbeeldcode die we hebben gebruikt voor statische analyse is beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found