Opublikowane 09 kwietnia 2017 5 minut
bookmark_border

DevLog #5

Ten tydzień był ciekawy. Spring miał buga, rozwiązałem pierwszy issue Workdone na GitHubie, wykonałem raport Code Coverage i napisałem kolejny element frontendu.

JavaScriptu więcej niż Javy

Workdone miał być projektem w języku Java, ale według GitHuba to ponad 70% kodu to JavaScript. GitHubowy rozkład projektu na języki Nawet licząc to, że część HTMLa jest jako String w JavaScriptcie to i tak jestem zdziwiony tą dysproporcją. Vue.js spodobał mi się, więc nie powiem, że jest źle, ale widząc to ile jeszcze mam pracy przy frontendzie to prognozuje, że JS będzie stanowił 90% mojego projektu. Coś niespotykanego...

Spring, ty...

Północ, pełen energii siadam do nocnego kodzenia. Dźwięk klawiszy roznosi się po pokoju. Już tylko odpale testy i robię commita a tutaj w konsoli Gradle pojawia się coś czerwonego.

Zawał, bół, smutek, cierpienie.

Oto przyczyna:

FAILURE: Build failed with an exception.
* Where:
Build file '/home/travis/build/PoprostuRonin/workdone/build.gradle' line: 17
* What went wrong:
A problem occurred evaluating root project 'workdone'.
> org.gradle.api.invocation.Gradle.buildFinished(Lorg/gradle/api/Action;)V

Czyli w sumie to kij wie co. No to zaczynamy szukać przyczyny...

Spring Initializr

Najpierw trzeba było sprawdzić czy problem dotyczy mojego projektu czy jest to problem związany z moją maszyną lub ewentualnie z jakimś pluginem, może nawet IDE.

Niestety, odpalenie świeżego projektu daje podobny efekt.

Travis CI

Jak pisałem w poście o continuous integration wspomniałem o jednej z zalet CI, czyli odporność na różnorodność sprzętu. Skorzystałem z tej zalety i ręcznie kazałem Travisowi jeszcze raz zbudować wersję, która wcześniej się zbudowała i efekt był ciekawy --- dokładnie ten sam błąd.

build.gradle

Postanowiłem pobawić się tym plikiem. Trochę usunąłem, gdzieś tam dodałem dokładną wersję, zaktualizowałem Gradle. Nic nie rozwiązało problemu, ale dało mi głównego podejrzanego: plugin Springa dla Gradle.

Analiza pluginu

Repozytorium pluginu sprawiło, że wszystko było już dla mnie jasne. Sam plik README pokazał mi o innym sposobie użycia pluginu

plugins {
    id "io.spring.dependency-management" version "1.0.1.RELEASE"
}

Zrobiłem tak i wszystko zaczęło działać!

Spring Initializr ma błąd?

Tak, wygenerował mi projekt z złym build.gradle. Chciałem nawet naprawić ten błąd, ale zauważyłem, że już ktoś dopisał kod aby pod wersją Spring Boota 2.0.0-SNAPSHOT pojawiało się dobre użycie pluginu. Najwidoczniej problem był z czymś innym, może po prostu na produkcji była stara wersja czy co. {{< tweet 849593672266133504 >}}

Code coverage

Pomyślałem sobie, że wykonam sobie raport pokrycia kodu. Szukam opcji w IntelliJ i jestem lekko zdziwiony, bo ta opcja nie obsługuje Gradle? Ok. Proste zapytanie do Google i odkryłem, że istnieje taka biblioteka jak JaCoCo i jest do niej plugin dla Gradle.

Wygenerowałem raport i na pierwszy rzut oka byłem zawiedziony.

Główna strona raportu

Tylko 70%? To trochę mało... ale znalazłem przyczynę tego stanu.

Strona raportu klasy Todo

Testowanie generowanych metod jest raczej zbędne, więc w rzeczywistości to code coverage wynosi znacznie więcej niż 70%, nice :)

Frontend

Dodałem frontend dla list zadań. Nic wielkiego, gdy się umie korzystać z Vue. Byłem bardzo zadowolony z tego jak szybko udało mi się to zrobić. Plus w końcu naprawiłem problem z przeładowywaniem się komponentów.

To był dobry tydzień!

Bartosz Wiśniewski

Full Stack do wszystkiego (serio). Z programowaniem mam do czynienia już od ponad 5 lat. Zajmowałem się tworzeniem aplikacji mobilnych i gier. Lubię Pythona, Go i JavaScript (ale tą dobrą stronę). Czasem buduję zabawki z Arduino.