Wenn Java 8 und ein aktuelles Maven auf dem Raspberry Pi installiert ist, kann man in unter 5 Minuten eine komplette REST-Anwendung mit statischer Webseite erstellen und starten. Die dann sogar Hot Reloading fähig ist. Das geht in drei Schritten und das sogar auf einem Raspberry Pi Zero:
1. Ein neues leeres Verzeichnis erstellen und dahin wechseln:
1 2 |
mkdir quarkus-anwendung cd quarkus-anwendung |
2. Mit folgenden Maven Kommando ein Maven Projekt in ca. 30 Sekunden erstellen
1 |
mvn io.quarkus:quarkus-maven-plugin:0.24.0:create -DprojectGroupId=de.wenzlaff.info -DprojectArtifactId=info-kleinhirn -DclassName="de.wenzlaff.InfoResource" -Dpath="/info" |
3. Das Projekt compilieren und starten in ca. 40 Sekunden mit:
1 |
mvn compile quarkus:dev |
Wenn der Server gestartet ist kann im Browser das Servlet aufgerufen werden mit:
http://[PI-ADRESSE]:8080/info
Ergebnis: hello
4. Nun wollen wir in einem anderen Kommondozeilen-Fenster in das Verzeichnis
1 2 3 |
cd ~/quarkus-anwendung/src/main/java/de/wenzlaff vi InfoResource.java |
gehen und in einem Editor die Java Klasse InfoResource.java verändern. Wir ersetzen das hello durch: Hallo Kleinhirn.eu und speichern die Datei ab.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package de.wenzlaff; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/info") public class InfoResource { @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return "Hallo Kleinhirn.eu"; } } |
Nun können wir die Webseite aktualisieren und wir sehen den neu compilierten Code: Hallo Kleinhirn.eu. Wir können auch die statische Testseite aufrufen mit
http://[PI-ADRESSE]:8080
Auch ein JUnit Test wurde automatisch erstellt. Der muss natürlich jetzt angepasst werden, da er sonst nach der Änderung fehlschlägt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[INFO] [INFO] Results: [INFO] [ERROR] Failures: [ERROR] InfoResourceTest.testHelloEndpoint:18 1 expectation failed. Response body doesn't match expectation. Expected: is "hello" Actual: Hallo Kleinhirn.eu [INFO] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE |
Also nach ~/quarkus-anwendung/src/test/java/de/wenzlaff gehen und die InfoResourceTest.java Klasse anpassen und speichern, schon läuft es wieder mit einem mvn test:
1 2 3 4 5 6 7 8 9 10 11 |
INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 65.462 s - in de.wenzlaff.InfoResourceTest INFO [io.quarkus] (main) Quarkus stopped in 0.968s [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:15 min |
Und auch ein Package kann man leicht erstellen um die Anwendung zu verteilen und starten. Das geht mit dem Maven Befehlt:
./mvnw clean package
Und schon hat man im target Verzeichnis ein startbares JAR und das auf einem Raspberry Pi Zero:
1 2 3 4 5 6 |
INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 28914ms [INFO] [io.quarkus.creator.phase.runnerjar.RunnerJarPhase] Building jar: /home/pi/quarkus-anwendung/target/info-kleinhirn-1.0-SNAPSHOT-runner.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:21 min |
Das kann man dann auch leicht starten, im target Verzeichnis:
java -jar info-kleinhirn-1.0-SNAPSHOT-runner.jar
Das starten läuft dann in 20 Sekunden:
1 2 3 4 5 |
pi@pi-zero:~/quarkus-anwendung/target $ java -jar info-kleinhirn-1.0-SNAPSHOT-runner.jar WARN [io.qua.net.run.NettyRecorder] (Thread-1) Localhost lookup took more than one second, you need to add a /etc/hosts entry to improve Quarkus startup time. See https://thoeni.io/post/macos-sierra-java/ for details. INFO [io.quarkus] (main) info-kleinhirn 1.0-SNAPSHOT (running on Quarkus 0.24.0) started in 18.736s. Listening on: http://0.0.0.0:8080 INFO [io.quarkus] (main) Profile prod activated. INFO [io.quarkus] (main) Installed features: [cdi, resteasy] |
Wenn das nicht cool ist. Weitere Infos auf der Quarkus Seite.