Kategorie
java

Quarkus – pierwsze kroki

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.

Quarkus - generowanie aplikacji
Źródło: https://code.quarkus.io/

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.

Struktura projektowa Quarkus
Struktura projektowa wygenerowanego projektu Quarkus

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.

Domyślna strona główna aplikacji w Quarkus
Strona świeżej aplikacji w Quarkus.

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ą.

0 0 votes
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Jestem ciekawy, co myślisz. Dodaj komentarz na dole!x