Praktyczna Java. Checkstyle

By 4 czerwca 2016Praktyczna Java

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)

  •  
  •  
  •  
  •  
  •