Każdy, kto choć raz pracował w większym zespole zapewne nieraz spotkał się z różnymi problemami — inne ustawienia formatowania, spacje i tabulacje, inna konwencja kodu. Na szczęście jest statyczna analiza kodu — dzisiaj o Checkstyle!
Checkstyle, jak sama nazwa wskazuje, służy do kontrolowania stylu. Domyślnie sprawdza on wiele elementów, które mogą się wydawać uciążliwe, ale każde sprawdzenie można skonfigurować indywidualnie, a także napisać własne reguły!
Użycie Checkstyle w projekcie
Aby Twój projekt mógł korzystać z Checkstyle, masz trzy możliwości możliwości — uruchamiać go osobno, korzystać z wtyczki w środowisku (np. Eclipse) lub połączyć z procesem budowania (np. Mavenem lub Ant). Polecamy szczególnie połączenie dwóch ostatnich opcji — dzięki temu będziesz miała na bieżąco informacje, że coś co napisałaś nie jest zgodne ze wspólnymi zasadami, a jednocześnie jeśli przeoczysz taki problem, to projekt się nie zbuduje.
Uruchamianie z linii komend
Jeśli z jakiegoś powodu chcesz tylko sprawdzić kod jednorazowo, ale nie chcesz włączać checkstyle w proces budowania projektu, możesz uruchomić go z linii komend. Po pobraniu pliku JAR i mając przygotowaną konfigurację, możemy po prostu uruchomić sprawdzenie za pomocą następującego polecenia:
java -jar checkstyle.jar -c /sun_checks.xml ./MyClass.java
To sprawdzi tylko jedną klasę — aby sprawdzić np. cały katalog i wszystkie pliki Java w nim zawarte, możemy skorzystać z następującego polecenia:
java -jar checkstyle.jar -c /sun_checks.xml ./src
Pełną dokumentację, jak uruchomić checkstyle w różnych konfiguracjach z linii komend znajdziesz w oficjalnym tutorialu.
Korzystanie z checkstyle w Eclipse
Aby skorzystać z Checkstyle w eclipse, możesz skorzystać z gotowego pluginu. W tym celu wybierz opcję ‘Eclipse Marketplace’ w menu help, a następnie wyszukaj ‘Checkstyle’ — po chwili pojawi się odpowiednie opcja.
Jeśli posiadasz starszą wersję, możesz skorzystać z ‘tradycyjnego’ sposobu instalacji — Z menu Help wybierz opcję ‘Install new software’, a następnie w polu ‘Work with’ wpisz adres: http://eclipse-cs.sf.net/update i zatwierdź enterem. Po chwili poniżej pojawi się opcja instalacji odpowiedniego pluginu.
Szczegółowy poradnik krok po kroku znajdziesz np. na stronie vogella.com lub na stronie pluginu.
Instalacja w IntelliJ IDEA
Oczywiście dla IntelliJ IDEA także istnieje gotowy plugin do Checkstyle — znajdziesz go tutaj: https://plugins.jetbrains.com/plugin/1065
Korzystanie z checkstyle w procesie budowania (np. z użyciem Mavena)
W przypadku Mavena istnieją trzy opcje korzystania z Checkstyle. Pierwsza polega na tym, że przy każdym buildzie zostanie wygenerowany raport ze sprawdzania — będą w nim wypisane wszystkie ‘problemy’, wraz z plikami oraz liniami, w których się dane problemy znajdują. Nie będzie to miało jednak wpływu na powodzenie lub niepowodzenie samego budowania projektu. Taką konfigurację możemy aktywować dodając poniższą sekcję do pom.xml:
<project>
...
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<reportSets>
<reportSet>
<reports>
<report>checkstyle</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
...
</project>
Drugi sposób to włączenie checkstyle jako etapu budowania projektu — jeśli zostaną ‘zauważone’ błędy, to build się nie uda. Aby włączyć taki sposób integracji, możesz użyć poniższej konfiguracji:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Pełną dokumentację i inne przykłady znajdziesz na stronie projektu. Zwróć uwagę, że w obu przypadkach musisz podać ścieżkę do pliku xml z konfiguracją (opis konfiguracji znajdziesz poniżej) — może to być zarówno ścieżka bezwzględna (np. C:/checkstyle.xml), jak i względna (czyli np. względem katalogu src/main/resources).
Inne narzędzia do budowania projektów
Oczywiście jeśli Twój projekt nie korzysta z Mavena, a z innej technologii do budowania, to najprawdopodobniej istnieje plugin lub sposób, żeby zintegrować go z Checkstyle — jest to na tyle popularna biblioteka, że z pewnością znajdziesz materiały w internecie!
Konfiguracja, co ma być sprawdzane
W checkstyle wbudowane są dwa ‘zestawy’ sprawdzeń — reprezentują one oficjalne wytyczne dotyczące stylu opublikowane przez Sun orz te używane w Google, ich opis znajdziesz na stronie projektu, a źródła np w serwisie github. Konfiguracje w postaci plików XML znajdziesz w komplecie z samym narzędziem.
Oczywiście możliwe jest stworzenie własnej konfiguracji — wystarczy odpowiednio przygotować plik XML. Najczęściej warto zacząć od już gotowego zestawu, i ewentualnie modyfikować go w miarę jak projekt się rozwija, a wraz z nim jego potrzeby czy konwencje.
Tworzenie pliku konfiguracyjnego ogranicza się najczęściej do wybrania spośród istniejących już sprawdzeń tych, które odpowiadają używanym przez nas konwencjom — listę wszystkich (dostępnych domyślnie) znajdziesz oczywiście w dokumentacji.
W sieci znajdziesz też wiele gotowców — wystarczy wpisać w wyszukiwarkę ‘checkstyle configuration file’. Jeśli pracujesz w większej firmie — poszukaj w wewnętrznych materiałach, istnieje szansa, że ktoś przygotował już zestaw reguł odzwierciedlający konwencje firmy :)
Inną opcją na konfigurację Checkstyle jest stworzenie własnych sprawdzeń i sposobów, w jaki kod będzie analizowany. Sprawdzenia takie sprowadzają się do napisania klasy w Javie implementującej odpowiedni interfejs, ale konieczna jest podstawowa wiedza na temat przetwarzania i kompilacji kodu — w szczególności rozumienie, czym jest AST (abstract syntax tree) oraz jak z niego korzystać. Przystepny tutorial możesz znaleźć np. w dokumentacji Checkstyle. Możesz także zerknąć na projekt sevntu-checkstyle, gdzie znajdziesz dodatkowe sprawdzenia stworzone przez instytut techniczny w Sewastopolu.
Podsumowanie
O ile największą wartość można ‘zauważyć’ w projektach, nad którymi pracuje wiele osób, to także jeśli sama piszesz projekt Checkstyle jest narzędziem wartym rozważenia — może pomóc Ci pisać czytelniejszy kod oraz zwrócić uwagę na elementy, o których wcześniej nie myślałaś. Jest to jedno z 2 narzędzi do statycznej analizy kodu, które są właściwie standardem pracy z projektami w Javie — drugie także omówimy na łamach bloga już wkrótce :)
Oczywiście podobne narzędzia istnieją także dla innych języków, np Ruby (rubocop), Python (różne), C# (StyleCop, FxCop)