Erste Schritte
Was ist Quarkus?
Quarkus ist ein Kubernetes Native Java Stack, der auf GraalVM und OpenJDK HotSpot aufbaut und Java-Programme zehnmal schneller und hundertmal kleiner macht. Quarkus verbessert die Entwickler-Produktivität durch zusätzliche Features wie Live Reloading/Debugging und Persistenz mit Panache.
Voraussetzungen
Java 8
Maven 3.5.3+ (empfohlen Maven 3.6.X)
GraalVM 19 oder Docker (optional für eine native Kompilierung)
Die erste Quarkus-Anwendung
Eine minimale Quarkus-Anwendung lässt sich via Maven-Ziel erstellen. Das folgende Ziel erzeugt Endpunkt, Test und Docker-Ressourcen:
mvn io.quarkus:quarkus-maven-plugin:0.18.0:create \ -DprojectGroupId=org.alexsotob \ -DprojectArtifactId=jax \ -DclassName="org.alexsotob.quickstart.GreetingResource" \ -Dpath="/hello" Quarkus im Live-Reload (Dev-)Modus starten: ./mvnw compile quarkus:dev
Endpunkt abfragen:
curl http://localhost:8080/hello
Live-Reload
Wird eine Quarkus-Anwendung im Live-Reload-Modus gestartet, werden Änderungen ohne erneutes Kompilieren oder Paketieren automatisch sichtbar. Beispiel: Ändere den Ausgabewert der Klasse src/main/java/org/alexsotob/quickstart/GreetingResource.java im Live-Reload-Modus.

Packaging
Die Anweisung ./mvnw package generiert ein jar-File namens jax-1.0-SNAPSHOT-runner.jar, das die Anwendung sowie ein lib-Verzeichnis mit allen nötigen Abhängigkeiten zum Starten der Anwendung enthält. Quarkus erzeugt kein Fat-JAR, um gut mit Docker Layern zusammenarbeiten zu können. jar-File und lib-Ordner sollten im selben Directory liegen.
Um ein natives Executable zu erhalten, kann GraalVM lokal installiert werden. Mittels GraalVM lässt sich eine ausführbare Datei für die installierte Plattform erzeugen. Alternativ kann ein Docker-Container mit einem nativen Executable der Anwendung erstellt werden:
./mvnw package -Pnative -Dnative-image.docker-build=true
Danach kann der Docker-Container gebaut und gestartet werden:
docker build -f src/main/docker/Dockerfile.native -t quarkus/jax docker run -i --rm -p 8080:8080 quarkus/jax
Grundlagen
JAX-RS
RESTful Web APIs lassen sich in Quarkus mittels JAX-RS definieren:
@Path("/book") public class BookResource { @GET @Produces(MediaType.APPLICATION_JSON) public List<Book> getAllBooks() { } @POST @Produces(MediaType.APPLICATION_JSON) public Response createBook(Book book) { } @DELETE @Path("{isbn}") @Produces(MediaType.APPLICATION_JSON) public Response deleteBook(@PathParam("isbn") String isbn) { } @GET @Produces(MediaType.APPLICA...