Jeśli zastanawiasz się, jak szybko rozpocząć pracę z Quarkus, to dobrze trafiłeś. W tym artykule opisuję, w jaki sposób możesz wystartować z tym niezwykle fajnym szkieletem aplikacyjnym. Znajdziesz tu informacje dotyczące generowania aplikacji, jej domyślnej struktury oraz pracy z uwzględnieniem live coding.
Kod do niniejszego artykułu znajdziesz tutaj:
https://github.com/bchmielewski/quarkus-intro
Początek projektu
Quarkus bardzo dobrze wspiera programistę na etapie tworzenia projektu. Wzorem Spring Boota i słynnej już https://start.spring.io/ wprowadzono tutaj podobne rozwiązanie. W Quarkus możemy skorzystać ze strony https://code.quarkus.io/ do wygenerowanie nowego projektu.
W ramach konfiguracji możemy wybrać typowe właściwości dla projektów budowanych za pomocą Apache Maven.
Wsparcie dla Gradle jest w tej chwili na etapie Preview. Nie jest to raczej duży problem, bo tradycyjnie Maven jest wspierany zwykle w pierwszej kolejności. Wynika to z tego, że jest dłużej na rynku i jest też praktycznie standardem wykorzystywanym w aplikacjach korporacyjnych i w pipeline’ach wdrożeniowych.

Po ustawieniu właściwości i wybraniu bibliotek, z których chcemy skorzystać wystarczy kliknąć na stronie Generate your application i po chwili możemy się cieszyć ściągniętą, przygotowaną do działania paczką.
Alternatywnym podejściem jest skorzystanie z linii komend. Tutaj z pomocą przychodzi quarkus-maven-plugin. Z jego pomocą możemy wygenerować podobny projekt:
mvn io.quarkus:quarkus-maven-plugin:1.2.1.Final:create \
-DprojectGroupId=pl.itbrains.demo.quarkus \
-DprojectArtifactId=quarkus-intro \
-DclassName="pl.itbrains.demo.quarkus.intro.IntroResource" \
-Dpath="/intro" -Dextensions="resteasy-jsonb"
Struktura projektu
Struktura projektu jest typowa. Warto tutaj przypomnieć, że Quarkus bardzo mocno stawia na konteneryzację. Co za tym idzie od razu w standardzie dostajemy wygenerowane pliki dla Dockera.

Mamy do dyspozycji Dockerfile w dwóch wersjach:
- tradycyjnej – opartej o obraz z JVM,
- natywnej – bez JVM.
Readme.md zawiera bardzo dobrze opisany zestaw komend dotyczących uruchomienia aplikacji i sposobów jej pakowania.
Pierwsze uruchomienie
Uruchomienie projektu w trybie developerskim jest niezwykle proste. Wystarczy wydać polecenie w konsoli:
mvnw quarkus:dev
Alternatywnie możemy projekt również uruchomić z Intellij Idea z zakładki Maven.
Zaraz po uruchomieniu otrzymujemy aplikację dostępną pod adresem http://localhost:8080. Jej strona główna zawiera podstawowe informacje o szkielecie i jego konfiguracji.

Dość nietypowo źródło strony znajduje się w katalogu src/META-INF.resources.
Wygenerowany jest również przykładowy zasób. W naszym przypadku podczas generowania aplikacji z linii komend nazwaliśmy go IntroResource.
Możemy sprawdzić działanie wchodząc na stronę http://localhost:8080/intro lub wywołując z linii komend polecenie:
curl http://localhost:8080/intro
hello
Prosty, wygenerowany zasób zwraca tylko komunikat „hello”.
Live coding
Gdy Quarkus startuje w trybie developerski uzyskujemy możliwość automatycznego przeładowywania zmienianych klas.
Jeśli teraz na przykład zmienimy klasę:
@Path("/intro")
public class IntroResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
na:
@Path("/intro")
public class IntroResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Quarkus Hello World!";
}
}
wówczas zmiana ta zostanie wykryta przez szkielet, a Quarkus uruchomi się ponownie z aktualną wersją klasy, co widać na poniższym zrzucie z konsoli:
2020-02-27 21:36:51,904 INFO [io.quarkus] (main) quarkus-intro 1.0-SNAPSHOT (running on Quarkus 1.2.1.Final) started in 1.908s. Listening on: http://0.0.0.0:8080
2020-02-27 21:36:51,927 INFO [io.quarkus] (main) Profile dev activated. Live Coding activated.
2020-02-27 21:36:51,929 INFO [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jsonb]
2020-02-27 21:44:18,840 INFO [io.qua.dev] (vert.x-worker-thread-0) Changed source files detected, recompiling [C:\Users\bchm\projects\quarkus-intro\src\main\java\pl\itbrains\demo\quarkus\intro\IntroResource.java] bootstrap class path not set in conjunction with -source 8, line -1 in [unknown source]
2020-02-27 21:44:19,849 INFO [io.quarkus] (vert.x-worker-thread-0) Quarkus stopped in 0.040s
2020-02-27 21:44:20,183 INFO [io.quarkus] (vert.x-worker-thread-0) quarkus-intro 1.0-SNAPSHOT (running on Quarkus 1.2.1.Final) started in 0.330s. Listening on: http://0.0.0.0:8080
2020-02-27 21:44:20,187 INFO [io.quarkus] (vert.x-worker-thread-0) Profile dev activated. Live Coding activated.
2020-02-27 21:44:20,189 INFO [io.quarkus] (vert.x-worker-thread-0) Installed features: [cdi, resteasy, resteasy-jsonb]
2020-02-27 21:44:20,191 INFO [io.qua.dev] (vert.x-worker-thread-0) Hot replace total time: 1.353s
Pamiętamy również o uaktualnieniu testu IntroResourceTest.
Podsumowanie
W niniejszym artykule rozpoczęliśmy pracę z aplikacją napisaną przy pomocy szkieletu Quarkus. Pierwsze kroki, jakie wykonaliśmy, to stworzenie prostej aplikacji, omówienie jej struktury oraz uruchomienie jej w trybie developerskim ze wsparciem live coding.
I jak zawsze, jeśli artykuł Ci się podobał, chcesz dowiedzieć się czegoś więcej w temacie lub masz propozycję innego zagadnienia, to daj znać w komentarzu. Zachęcam też do zapisania się na listę mailową.