Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Hallo an alle in diesem Blog, hier ist der vierte Beitrag der Quarkus-Reihe!

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Vorheriger Beitrag ging es darum, wie Quarkus MicroProfile und Spring kombiniert. Wir möchten Sie daran erinnern Quark wird als „ultraschnelles subatomares Java“ positioniert, auch bekannt als „Kubernetes-orientierter Java-Stack, maßgeschneidert für GraalVM und OpenJDK HotSpot und zusammengestellt aus den besten Bibliotheken und Standards.“ Heute zeigen wir anhand des Beispiels, wie man bestehende Java-Anwendungen mit den Fähigkeiten von Quarkus modernisieren kann helloworld-Anwendungen aus dem Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart-Repository, das von Quarkus unterstützte CDI- und Servlet 3-Technologien verwendet.

Hierbei ist es wichtig zu beachten, dass sowohl Quarkus als auch JBoss EAP Wert auf die Verwendung von Tools legen, die möglichst auf Standards basieren. Sie haben keine Anwendung, die auf JBoss EAP ausgeführt wird? Kein Problem, es kann problemlos von Ihrem aktuellen Anwendungsserver auf JBoss EAP migriert werden Red Hat Application Migration Toolkit. Danach wird die endgültige und funktionierende Version des modernisierten Codes im Repository verfügbar sein github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus, im Modul Hallo Welt.

Beim Schreiben dieses Beitrags haben wir verwendet Quarkus-Tutorialshauptsächlich Erstellen Sie Ihre erste Anwendung und Bauen a Native ausführbare Datei.

Holen wir uns den Code

Erstellen wir zunächst einen lokalen Klon des Repositorys JBoss EAP-Schnellstarts:

$ git clone https://github.com/jboss-developer/jboss-eap-quickstarts.git
Cloning into 'jboss-eap-quickstarts'...
remote: Enumerating objects: 148133, done.
remote: Total 148133 (delta 0), reused 0 (delta 0), pack-reused 148133
Receiving objects: 100% (148133/148133), 59.90 MiB | 7.62 MiB/s, done.
Resolving deltas: 100% (66476/66476), done.
$ cd jboss-eap-quickstarts/helloworld/

Mal sehen, wie die ursprüngliche Hallowelt funktioniert

Eigentlich geht das Wesen dieser Anwendung schon aus dem Namen hervor, aber wir werden ihren Code streng wissenschaftlich modernisieren. Schauen wir uns daher zunächst diese Anwendung in ihrer ursprünglichen Form an.

Halloworld wird bereitgestellt

1. Öffnen Sie ein Terminal und gehen Sie zum Stammverzeichnis des JBoss EAP-Ordners (Sie können ihn herunterladen). hier), also in den Ordner EAP_HOME.

2. Starten Sie den JBoss EAP-Server mit dem Standardprofil:

$ EAP_HOME/bin/standalone.sh

Hinweis: Unter Windows wird zum Starten das Skript EAP_HOMEbinstandalone.bat verwendet.

Nach ein paar Sekunden sollte im Protokoll etwa Folgendes erscheinen:

[org.jboss.as] (Controller Boot Thread) WFLYSRV0025: JBoss EAP 7.2.0.GA (WildFly Core 6.0.11.Final-redhat-00001) started in 3315ms - Started 306 of 527 services (321 services are lazy, passive or on-demand)

3. In einem Browser öffnen 127.0.0.1:8080 und wir sehen Folgendes:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 1. JBoss EAP-Homepage.

4. Befolgen Sie die Anweisungen im Handbuch Erstellen und Bereitstellen des Quickstarts: Erweitern Sie helloworld und führen Sie (im Projektstammordner) den folgenden Befehl aus:

$ mvn clean install wildfly:deploy

Nach erfolgreicher Ausführung dieses Befehls sehen wir im Protokoll etwa Folgendes:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 8.224 s

Die erste Bereitstellung der helloworld-Anwendung auf JBoss EAP dauerte also etwas mehr als 8 Sekunden.

Hallowelt testen

Streng nach Anweisungen handeln Greifen Sie auf die Anwendung zu, im Browser öffnen 127.0.0.1:8080/helloworld und wir sehen Folgendes:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 2. Original Hello World von JBoss EAP.

Änderungen machen

Ändern Sie den Eingabeparameter createHelloMessage(String name) von World in Marco:

writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");

Führen Sie den folgenden Befehl erneut aus:

$ mvn clean install wildfly:deploy

Dann aktualisieren wir die Seite im Browser und sehen, dass sich der Text geändert hat:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 3. Hallo Marco in JBoss EAP.

Setzen Sie die Helloworld-Bereitstellung zurück und fahren Sie JBoss EAP herunter

Dies ist optional, aber wenn Sie die Bereitstellung abbrechen möchten, können Sie dies mit dem folgenden Befehl tun:

$ mvn clean install wildfly:undeploy

Um Ihre JBoss EAP-Instanz herunterzufahren, drücken Sie einfach Strg+C im Terminalfenster.

Halloworld wird aktualisiert

Lassen Sie uns nun die ursprüngliche Helloworld-Anwendung modernisieren.

Erstellen Sie einen neuen Zweig

Nach Abschluss des Schnellstartprojekts erstellen wir einen neuen Arbeitszweig:

$ git checkout -b quarkus 7.2.0.GA

Ändern der pom.xml-Datei

Wir beginnen mit der Änderung der Anwendung aus der Datei pom.xml. Um Quarkus das Einfügen von XML-Blöcken zu ermöglichen, führen Sie den folgenden Befehl im Ordner „helloworld“ aus:

$ mvn io.quarkus:quarkus-maven-plugin:0.23.2:create

Beim Schreiben dieses Artikels wurde Version 0.23.2 verwendet. Quarkus veröffentlicht häufig neue Versionen. Welche Version die aktuellste ist, können Sie auf der Website herausfinden github.com/quarkusio/quarkus/releases/latest.

Der obige Befehl fügt die folgenden Elemente in pom.xml ein:

  • Eigentum , der die zu verwendende Version von Quarkus angibt.
  • Block um Quarkus-Stücklisten (Stücklisten) zu importieren, um nicht für jede Quarkus-Abhängigkeit eine Version hinzuzufügen.
  • Das Quarkus-Maven-Plugin ist für die Verpackung der Anwendung und die Bereitstellung des Entwicklungsmodus verantwortlich.
  • Das native Profil zum Erstellen ausführbarer Anwendungsdateien.

Darüber hinaus nehmen wir manuell die folgenden Änderungen an pom.xml vor:

  1. Das Etikett herausziehen Von dem Block und platzieren Sie es über dem Tag . Denn im nächsten Schritt werden wir die Sperre entfernen , dann müssen Sie speichern .
  2. Einen Block entfernen , denn wenn diese Anwendung mit Quarkus läuft, benötigt sie kein übergeordnetes POM von JBoss mehr.
  3. Füge einen Tag hinzu und platzieren Sie es unter dem Tag . Sie können die gewünschte Versionsnummer angeben.
  4. Entfernen des Etiketts , da es sich bei dieser Anwendung nicht mehr um ein WAR, sondern um ein reguläres JAR handelt.
  5. Wir ändern die folgenden Abhängigkeiten:
    1. Ändern Sie die Abhängigkeit javax.enterprise:cdi-api in io.quarkus:quarkus-arc und entfernen Sie sie bereitgestellt , da diese Quarkus-Erweiterung (laut Dokumentation) die Injektion von CDI-Abhängigkeiten ermöglicht.
    2. Ändern Sie die Abhängigkeit org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec in io.quarkus:quarkus-undertow und entfernen Sie sie bereitgestellt , weil (laut Dokumentation) diese Quarkus-Erweiterung Unterstützung für Servlets bietet.
    3. Wir entfernen die Abhängigkeit org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec, da sie mit den Abhängigkeiten einhergeht, die wir gerade geändert haben.

Die Version der pom.xml-Datei mit allen Änderungen finden Sie unter github.com/mrizzi/jboss-eap-quickstarts/blob/quarkus/helloworld/pom.xml.

Beachten Sie, dass der obige Befehl mvn io.quarkus:quarkus-maven-plugin:0.23.2:create nicht nur die Datei pom.xml ändert, sondern dem Projekt auch eine Reihe von Komponenten hinzufügt, nämlich die folgenden Dateien und Ordner:

  • Die Dateien mvnw und mvnw.cmd sowie der Ordner .mvn: Mit Maven Wrapper können Sie Maven-Projekte einer bestimmten Maven-Version ausführen, ohne diese Version zu installieren.
  • Docker-Ordner (im Verzeichnis src/main/): Dieser enthält Beispiel-Dockerdateien für den nativen und den JVM-Modus (zusammen mit der .dockerignore-Datei).
  • Ordner „Resources“ (im Verzeichnis src/main/): Dieser enthält eine leere application.properties-Datei und eine Beispiel-Startseite für Quarkus index.html (weitere Einzelheiten finden Sie unter Ausführen der modernisierten helloworld).

Starten Sie helloworld
Um die Anwendung zu testen, verwenden wir quarkus:dev, das Quarkus im Entwicklungsmodus startet (weitere Einzelheiten finden Sie in diesem Abschnitt im Handbuch). Entwicklungsmodus).

Hinweis: Dieser Schritt wird voraussichtlich zu einem Fehler führen, da wir noch nicht alle notwendigen Änderungen vorgenommen haben.

Lassen Sie uns nun den Befehl ausführen, um zu sehen, wie er funktioniert:

$ ./mvnw compile quarkus:dev
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.jboss.eap.quickstarts:helloworld >----------------
[INFO] Building Quickstart: helloworld quarkus
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:0.23.2:dev (default-cli) @ helloworld ---
Listening for transport dt_socket at address: 5005
INFO  [io.qua.dep.QuarkusAugmentor] Beginning quarkus augmentation
INFO  [org.jbo.threads] JBoss Threads version 3.0.0.Final
ERROR [io.qua.dev.DevModeMain] Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.jboss.as.quickstarts.helloworld.HelloService and qualifiers [@Default]
	- java member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- declared on CLASS bean [types=[javax.servlet.ServletConfig, java.io.Serializable, org.jboss.as.quickstarts.helloworld.HelloWorldServlet, javax.servlet.GenericServlet, javax.servlet.Servlet, java.lang.Object, javax.servlet.http.HttpServlet], qualifiers=[@Default, @Any], target=org.jboss.as.quickstarts.helloworld.HelloWorldServlet]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:841)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:214)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:106)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:249)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:780)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:415)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
	at java.lang.Thread.run(Thread.java:748)
	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.jboss.as.quickstarts.helloworld.HelloService and qualifiers [@Default]
	- java member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- declared on CLASS bean [types=[javax.servlet.ServletConfig, java.io.Serializable, org.jboss.as.quickstarts.helloworld.HelloWorldServlet, javax.servlet.GenericServlet, javax.servlet.Servlet, java.lang.Object, javax.servlet.http.HttpServlet], qualifiers=[@Default, @Any], target=org.jboss.as.quickstarts.helloworld.HelloWorldServlet]
	at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:428)
	at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:371)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:206)
	... 14 more

Es funktioniert also nicht... Warum?

Die UnsatisfiedResolutionException verweist auf die HelloService-Klasse, die ein Mitglied der HelloWorldServlet-Klasse ist (Java-Mitglied: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). Das Problem besteht darin, dass HelloWorldServlet eine injizierte Instanz von HelloService benötigt und diese nicht gefunden werden kann (obwohl sich beide Klassen im selben Paket befinden).

Es ist Zeit zurückzukehren Dokumentation und lesen Sie, wie es in Quarkus funktioniert Injizieren, und deshalb Kontexte und Abhängigkeitsinjektion (CDI). Öffnen Sie daher den Leitfaden zu Kontexten und Abhängigkeitsinjektion und im Abschnitt Bohnenentdeckung wir lesen: „Eine Bean-Klasse, die keine Bean-definierende Annotation hat, wird nicht durchsucht.“

Schauen wir uns die HelloService-Klasse an – sie hat wirklich keine solche Annotation. Daher muss es hinzugefügt werden, damit Quarkus die Bohne suchen und finden kann. Und da es sich um ein zustandsloses Objekt handelt, können wir die Annotation @ApplicationScoped ganz einfach wie folgt hinzufügen:

@ApplicationScoped
public class HelloService {

Hinweis: Hier fordert Sie die Entwicklungsumgebung möglicherweise auf, das erforderliche Paket hinzuzufügen (siehe Zeile unten), und Sie müssen dies manuell tun, etwa so:

import javax.enterprise.context.ApplicationScoped;

Wenn Sie sich nicht sicher sind, welcher Bereich verwendet werden soll, falls dieser für die Quell-Bean überhaupt nicht angegeben ist, lesen Sie die Dokumentation JSR 365: Kontexte und Abhängigkeitsinjektion für Java 2.0 – Standardbereich.

Jetzt versuchen wir erneut, die Anwendung mit dem Befehl ./mvnw compile quarkus:dev zu starten:

$ ./mvnw compile quarkus:dev
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.jboss.eap.quickstarts:helloworld >----------------
[INFO] Building Quickstart: helloworld quarkus
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /home/mrizzi/git/forked/jboss-eap-quickstarts/helloworld/target/classes
[INFO]
[INFO] --- quarkus-maven-plugin:0.23.2:dev (default-cli) @ helloworld ---
Listening for transport dt_socket at address: 5005
INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 576ms
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 1.083s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

Jetzt läuft alles ohne Fehler.

Einführung der modernisierten Hallowelt
Öffnen Sie es wie im Protokoll geschrieben im Browser 0.0.0.0:8080 (die Standard-Startseite von Quarkus) und wir sehen Folgendes:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 4. Quarkus-Entwickler-Startseite.

Die WebServlet-Annotation für diese Anwendung enthält die folgende Kontextdefinition:

@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {

Deshalb gehen wir im Browser auf 0.0.0.0:8080/HelloWorld und wir sehen Folgendes:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 5: Die Quarkus-Entwicklerseite für die Hello World-Anwendung.

Nun, alles funktioniert.

Nehmen wir nun Änderungen am Code vor. Beachten Sie, dass der Befehl ./mvnw compile quarkus:dev noch ausgeführt wird und wir nicht die Absicht haben, ihn zu stoppen. Versuchen wir nun, die gleichen – sehr trivialen – Änderungen am Code selbst vorzunehmen und zu sehen, wie Quarkus dem Entwickler das Leben erleichtert:

writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");

Speichern Sie die Datei und aktualisieren Sie dann die Webseite, um „Hello Marco“ anzuzeigen, wie im Screenshot unten gezeigt:

Quarkus: Anwendungsmodernisierung am Beispiel von helloworld aus dem JBoss EAP Quickstart

Reis. 6. Hallo Marco-Seite in Quarkus-Entwickler.

Schauen wir uns nun die Ausgabe im Terminal an:

INFO  [io.qua.dev] (vert.x-worker-thread-3) Changed source files detected, recompiling [/home/mrizzi/git/forked/jboss-eap-quickstarts/helloworld/src/main/java/org/jboss/as/quickstarts/helloworld/HelloWorldServlet.java]
INFO  [io.quarkus] (vert.x-worker-thread-3) Quarkus stopped in 0.003s
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Beginning quarkus augmentation
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Quarkus augmentation completed in 232ms
INFO  [io.quarkus] (vert.x-worker-thread-3) Quarkus 0.23.2 started in 0.257s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (vert.x-worker-thread-3) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (vert.x-worker-thread-3) Installed features: [cdi]
INFO  [io.qua.dev] (vert.x-worker-thread-3) Hot replace total time: 0.371s

Die Seitenaktualisierung löste die Erkennung von Änderungen im Quellcode aus und Quarkus führte automatisch einen Stopp-Start-Vorgang durch. Und das alles in nur 0.371 Sekunden (hier ist es, das „ultraschnelle subatomare Java“).

Halloworld in ein JAR-Paket einbauen
Da der Code nun ordnungsgemäß funktioniert, verpacken wir ihn mit dem folgenden Befehl:

$ ./mvnw clean package

Dieser Befehl erstellt zwei JAR-Dateien im Ordner /target: die Datei helloworld-.jar, ein Standardartefakt, das vom Maven-Team zusammen mit den Klassen und Ressourcen des Projekts zusammengestellt wurde. Und die Datei helloworld-runner.jar, eine ausführbare JAR-Datei.

Bitte beachten Sie, dass es sich hierbei nicht um ein Uber-JAR handelt, da alle Abhängigkeiten einfach in den Ordner /target/lib kopiert (nicht in eine JAR-Datei gepackt) werden. Um dieses JAR aus einem anderen Ordner oder auf einem anderen Host auszuführen, müssen Sie daher sowohl die JAR-Datei selbst als auch den Ordner /lib dorthin kopieren, vorausgesetzt, dass das Class-Path-Element in der Datei MANIFEST.MF im JAR-Paket enthalten ist eine explizite Auflistung von JARs aus lib-Ordnern
Um zu erfahren, wie Sie Uber-JAR-Anwendungen erstellen, lesen Sie bitte das Tutorial Uber-Jar-Erstellung.

Starten Sie helloworld verpackt in JAR

Jetzt können wir unsere JAR mit dem Standard-Java-Befehl ausführen:

$ java -jar ./target/helloworld-<version>-runner.jar
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 0.673s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

Nachdem dies alles erledigt ist, gehen Sie zu Ihrem Browser unter 0.0.0.0:8080 und prüfen Sie, ob alles ordnungsgemäß funktioniert.

Kompilieren von helloworld in eine native ausführbare Datei

Unsere Hallowelt läuft also als eigenständige Java-Anwendung mit Quarkus-Abhängigkeiten. Sie können jedoch noch einen Schritt weiter gehen und es in eine native ausführbare Datei umwandeln.

GraalVM installieren
Dazu müssen Sie zunächst die notwendigen Tools installieren:

1. Laden Sie GraalVM 19.2.0.1 herunter von github.com/oracle/graal/releases/tag/vm-19.2.0.1.

2. Erweitern Sie das heruntergeladene Archiv:

$ tar xvzf graalvm-ce-linux-amd64-19.2.0.1.tar.gz

3. Gehen Sie zum Untar-Ordner.

4. Führen Sie den folgenden Befehl aus, um das native Image herunterzuladen und hinzuzufügen:

$ ./bin/gu install native-image

5. Registrieren Sie den in Schritt 2 erstellten Ordner in der Umgebungsvariablen GRAALVM_HOME:

$ export GRAALVM_HOME={untar-folder}/graalvm-ce-19.2.0.1)

Weitere Informationen und Installationsanweisungen zu anderen Betriebssystemen finden Sie im Handbuch. Erstellen einer nativen ausführbaren Datei – Voraussetzungen.

Helloworld in eine native ausführbare Datei integrieren
Lesen des Handbuchs Erstellen einer nativen ausführbaren Datei – Erstellen einer nativen ausführbaren Datei: „Jetzt erstellen wir eine native ausführbare Datei für unsere Anwendung, um deren Startzeit und Festplattengröße zu reduzieren. Die ausführbare Datei enthält alles, was zum Ausführen der Anwendung erforderlich ist, einschließlich der JVM (oder vielmehr einer verkürzten Version davon, die nur das enthält, was zum Ausführen der Anwendung erforderlich ist) und unserer Anwendung selbst.“

Um eine native ausführbare Datei zu erstellen, müssen Sie das native Maven-Profil aktivieren:

$ ./mvnw package -Pnative

Unser Build dauerte eine Minute und 10 Sekunden und die endgültige helloworld-runner-f-Datei wurde im Ordner /target erstellt.

Führen Sie die native ausführbare Datei „helloworld“ aus

Im vorherigen Schritt haben wir die ausführbare Datei /target/helloworld – runner erhalten. Lassen Sie es uns jetzt ausführen:

$ ./target/helloworld-<version>-runner
INFO  [io.quarkus] (main) Quarkus 0.23.2 started in 0.006s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi]

Öffnen Sie es erneut im Browser 0.0.0.0:8080 und prüfen Sie, ob alles ordnungsgemäß funktioniert.

Продолжение следует!

Wir glauben, dass die in diesem Beitrag besprochene Methode zur Modernisierung von Java-Anwendungen mithilfe von Quarkus-Funktionen (wenn auch anhand eines einfachen Beispiels) im wirklichen Leben aktiv eingesetzt werden sollte. Dabei werden Sie wahrscheinlich auf eine Reihe von Problemen stoßen, auf die wir im nächsten Beitrag teilweise eingehen werden. Dort werden wir darüber sprechen, wie der Speicherverbrauch gemessen werden kann, um Leistungsverbesserungen zu bewerten, ein wichtiger Teil des gesamten Anwendungsmodernisierungsprozesses.

Source: habr.com

Kommentar hinzufügen