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.
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.
Tylko 70%? To trochę mało... ale znalazłem przyczynę tego stanu.
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ń!