In unter 5 Minuten auf einem Raspberry Pi Zero eine Java Quarkus REST Anwendung mit JUnit-Test neu erstellen und starten?

Erstellt am 18. Oktober 2019 von It_berater

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:
Freut euch immer
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:

  1. Rest Test Programm: Java Migration von JUnit 4 nach JUnit 5 (1.0.0.-M6)
  2. Quicktest: Gestern wurde Quarkus 0.24.0 released – „Container First“
  3. Läuft eine Vaadin 8 Anwendung auch auf einem Raspberry PI Zero W?