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:
mkdir quarkus-anwendung cd quarkus-anwendung
2. Mit folgenden Maven Kommando ein Maven Projekt in ca. 30 Sekunden erstellen
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:
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 Kommondozeile in das Verzeichnis gehen
cd ~/quarkus-anwendung/src/main/java/de/wenzlaff vi InfoResource.java
und in einem Editor die Java Klasse InfoResource.java verändern. Wir ersetzen das hello durch: Hallo Kleinhirn.eu und speichern die Datei ab.
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.
[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:
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:
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:
pi@pi-zero:~/quarkus-anwendung/target $ java -jar info-kleinhirn-1.0-SNAPSHOT-runner.jar 2019-10-18 15:11:49,887 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. 2019-10-18 15:11:56,104 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 2019-10-18 15:11:56,152 INFO [io.quarkus] (main) Profile prod activated. 2019-10-18 15:11:56,158 INFO [io.quarkus] (main) Installed features: [cdi, resteasy]
Wenn das nicht cool ist. Weitere Infos auf der Quarkus Seite.
Ähnliche Artikel:
- Rest Test Programm: Java Migration von JUnit 4 nach JUnit 5 (1.0.0.-M6)
- Quicktest: Gestern wurde Quarkus 0.24.0 released – „Container First“
- Läuft eine Vaadin 8 Anwendung auch auf einem Raspberry PI Zero W?