Γεια σε όλους σε αυτό το blog, εδώ είναι η τέταρτη ανάρτηση της σειράς Quarkus!

αφορούσε το πώς το Quarkus συνδυάζει το MicroProfile και το Spring. Ας το θυμηθούμε τοποθετείται ως «υπερταχεία υποατομική Java», γνωστή και ως «στοίβα Java προσανατολισμένη στο Kubernetes, προσαρμοσμένη για GraalVM και OpenJDK HotSpot και συναρμολογημένη από τις καλύτερες βιβλιοθήκες και πρότυπα». Σήμερα θα δείξουμε πώς να εκσυγχρονίσετε υπάρχουσες εφαρμογές Java χρησιμοποιώντας τις δυνατότητες του Quarkus, χρησιμοποιώντας το παράδειγμα , το οποίο χρησιμοποιεί τεχνολογίες CDI και Servlet 3 που υποστηρίζονται από την Quarkus.
Είναι σημαντικό να σημειωθεί εδώ ότι τόσο το Quarkus όσο και το JBoss EAP δίνουν έμφαση στη χρήση εργαλείων που βασίζονται όσο το δυνατόν περισσότερο σε πρότυπα. Δεν έχετε μια εφαρμογή που εκτελείται στο JBoss EAP; Κανένα πρόβλημα, μπορεί εύκολα να μετεγκατασταθεί από τον τρέχοντα διακομιστή εφαρμογών σας στο JBoss EAP χρησιμοποιώντας . Στη συνέχεια, η τελική και λειτουργική έκδοση του εκσυγχρονισμένου κώδικα θα είναι διαθέσιμη στο αποθετήριο , στην ενότητα .
Όταν γράφαμε αυτήν την ανάρτηση χρησιμοποιήσαμε , ως επί το πλείστον και Κτίριο α .
Ας πάρουμε τον κωδικό
Πρώτα απ 'όλα, ας δημιουργήσουμε έναν τοπικό κλώνο του αποθετηρίου :
$ 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/
Ας δούμε πώς λειτουργεί το αρχικό helloworld
Στην πραγματικότητα, η ουσία αυτής της εφαρμογής είναι ξεκάθαρη από το όνομα, αλλά θα εκσυγχρονίσουμε τον κώδικά της αυστηρά επιστημονικά. Επομένως, πρώτα, ας δούμε αυτήν την εφαρμογή στην αρχική της μορφή.
Ανάπτυξη του helloworld
1. Ανοίξτε ένα τερματικό και μεταβείτε στη ρίζα του φακέλου JBoss EAP (μπορείτε να το κατεβάσετε ), δηλαδή στον φάκελο EAP_HOME.
2. Εκκινήστε τον διακομιστή JBoss EAP με το προεπιλεγμένο προφίλ:
$ EAP_HOME/bin/standalone.sh
Σημείωση: επί Windows Το σενάριο EAP_HOMEbinstandalone.bat χρησιμοποιείται για την εκκίνηση.
Μετά από μερικά δευτερόλεπτα, κάτι τέτοιο θα πρέπει να εμφανιστεί στο αρχείο καταγραφής:
[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. Ανοίξτε σε πρόγραμμα περιήγησης :8080 και βλέπουμε αυτό:

Ρύζι. 1. Αρχική σελίδα JBoss EAP.
4. Ακολουθήστε τις οδηγίες στο εγχειρίδιο : αναπτύξτε το helloworld και εκτελέστε (από τον ριζικό φάκελο του έργου) την ακόλουθη εντολή:
$ mvn clean install wildfly:deploy
Μετά την επιτυχή εκτέλεση αυτής της εντολής, θα δούμε κάτι σαν το ακόλουθο στο αρχείο καταγραφής:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.224 s
Έτσι, η πρώτη ανάπτυξη της εφαρμογής helloworld στο JBoss EAP διήρκεσε λίγο περισσότερο από 8 δευτερόλεπτα.
Δοκιμές helloworld
Ενεργώντας αυστηρά σύμφωνα με τις οδηγίες , ανοίξτε στο πρόγραμμα περιήγησης :8080/helloworld και βλέπουμε αυτό:

Ρύζι. 2. Πρωτότυπο Hello World από το JBoss EAP.
Κάνοντας αλλαγές
Αλλάξτε την παράμετρο εισαγωγής createHelloMessage(Όνομα συμβολοσειράς) από World σε Marco:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
Εκτελέστε ξανά την ακόλουθη εντολή:
$ mvn clean install wildfly:deploy
Στη συνέχεια, ανανεώνουμε τη σελίδα στο πρόγραμμα περιήγησης και βλέπουμε ότι το κείμενο έχει αλλάξει:

Ρύζι. 3. Γεια σου Μάρκο στο JBoss EAP.
Επαναφέρετε την ανάπτυξη του helloworld και τερματίστε το JBoss EAP
Αυτό είναι προαιρετικό, αλλά εάν θέλετε να ακυρώσετε την ανάπτυξη, μπορείτε να το κάνετε με την ακόλουθη εντολή:
$ mvn clean install wildfly:undeploy
Για να τερματίσετε την παρουσία του JBoss EAP, απλώς πατήστε Ctrl+C στο παράθυρο του τερματικού.
Αναβάθμιση του helloworld
Τώρα ας εκσυγχρονίσουμε την αρχική εφαρμογή helloworld.
Δημιουργήστε ένα νέο υποκατάστημα
Δημιουργούμε έναν νέο κλάδο εργασίας μετά την ολοκλήρωση του έργου γρήγορης εκκίνησης:
$ git checkout -b quarkus 7.2.0.GA
Αλλαγή του αρχείου pom.xml
Θα αρχίσουμε να αλλάζουμε την εφαρμογή από το αρχείο pom.xml. Για να επιτρέψετε στο Quarkus να εισάγει μπλοκ XML σε αυτό, εκτελέστε την ακόλουθη εντολή στον φάκελο helloworld:
$ mvn io.quarkus:quarkus-maven-plugin:0.23.2:create
Κατά τη σύνταξη αυτού του άρθρου χρησιμοποιήθηκε η έκδοση 0.23.2. Το Quarkus κυκλοφορεί συχνά νέες εκδόσεις, μπορείτε να μάθετε ποια έκδοση είναι η πιο πρόσφατη στον ιστότοπο .
Η παραπάνω εντολή θα εισαγάγει τα ακόλουθα στοιχεία στο pom.xml:
- Ιδιοκτησία , το οποίο καθορίζει την έκδοση του Quarkus που θα χρησιμοποιηθεί.
- ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ να εισαγάγετε Quarkus BOM (τιμολόγιο υλικών), ώστε να μην προσθέσετε μια έκδοση για κάθε εξάρτηση Quarkus.
- Το plugin quarkus-maven είναι υπεύθυνο για τη συσκευασία της εφαρμογής και την παροχή της λειτουργίας ανάπτυξης.
- Το εγγενές προφίλ για τη δημιουργία εκτελέσιμων εφαρμογών.
Επιπλέον, κάνουμε μη αυτόματα τις ακόλουθες αλλαγές στο pom.xml:
- Τραβώντας έξω την ετικέτα Απο το τετράγωνο και τοποθετήστε το πάνω από την ετικέτα . Γιατί στο επόμενο βήμα θα αφαιρέσουμε το μπλοκ , τότε πρέπει να αποθηκεύσετε .
- Αφαίρεση μπλοκ , γιατί όταν εκτελείται με το Quarkus, αυτή η εφαρμογή δεν θα χρειάζεται πλέον γονικό pom από το JBoss.
- Προσθέστε μια ετικέτα και τοποθετήστε το κάτω από την ετικέτα . Μπορείτε να καθορίσετε τον αριθμό έκδοσης που θέλετε.
- Αφαίρεση της ετικέτας , αφού αυτή η εφαρμογή δεν είναι πλέον ΠΟΛΕΜΟΣ, αλλά κανονικό JAR.
- Τροποποιούμε τις ακόλουθες εξαρτήσεις:
- Αλλάξτε την εξάρτηση javax.enterprise:cdi-api σε io.quarkus:quarkus-arc, αφαιρώντας υπό την προϋπόθεση , αφού (σύμφωνα με τα έγγραφα) αυτή η επέκταση Quarkus παρέχει ένεση εξαρτήσεων CDI.
- Αλλάξτε την εξάρτηση org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec σε io.quarkus:quarkus-underdow, αφαιρώντας υπό την προϋπόθεση , επειδή (σύμφωνα με τα έγγραφα) αυτή η επέκταση Quarkus παρέχει υποστήριξη για servlets.
- Καταργούμε την εξάρτηση org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec καθώς συνοδεύεται από τις εξαρτήσεις που μόλις αλλάξαμε.
Η έκδοση του αρχείου pom.xml με όλες τις αλλαγές βρίσκεται στο .
Σημειώστε ότι η παραπάνω εντολή mvn io.quarkus:quarkus-maven-plugin:0.23.2:create όχι μόνο αλλάζει το αρχείο pom.xml, αλλά προσθέτει επίσης έναν αριθμό στοιχείων στο έργο, δηλαδή τα ακόλουθα αρχεία και φακέλους:
- Το αρχείο mvnw και mvnw.cmd και ο φάκελος .mvn: Το Maven Wrapper σάς επιτρέπει να εκτελείτε έργα Maven μιας δεδομένης έκδοσης Maven χωρίς να εγκαταστήσετε αυτήν την έκδοση.
- Φάκελος Docker (στον κατάλογο src/main/): Αυτός περιέχει παραδείγματα Dockerfiles για εγγενείς λειτουργίες και λειτουργίες jvm (μαζί με το αρχείο .dockerignore).
- Φάκελος πόρων (στον κατάλογο src/main/): Περιέχει ένα κενό αρχείο application.properties και ένα δείγμα αρχικής σελίδας Quarkus index.html (ανατρέξτε στην ενότητα Εκτέλεση του εκσυγχρονισμένου helloworld για περισσότερες λεπτομέρειες).
Εκκινήστε το helloworld
Για να δοκιμάσουμε την εφαρμογή, χρησιμοποιούμε το quarkus:dev, το οποίο εκκινεί το Quarkus σε λειτουργία ανάπτυξης (για περισσότερες λεπτομέρειες, δείτε αυτήν την ενότητα στο εγχειρίδιο ).
Σημείωση: Αυτό το βήμα αναμένεται να οδηγήσει σε σφάλμα, καθώς δεν έχουμε κάνει ακόμη όλες τις απαραίτητες αλλαγές.
Τώρα ας εκτελέσουμε την εντολή για να δούμε πώς λειτουργεί:
$ ./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
Λοιπόν, δεν λειτουργεί... Γιατί;
Το UnsatisfiedResolutionException οδηγεί στην κλάση HelloService, η οποία είναι μέλος της κλάσης HelloWorldServlet (μέλος Java: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). Το πρόβλημα είναι ότι το HelloWorldServlet χρειάζεται ένα injected instance του HelloService και δεν μπορεί να βρεθεί (παρόλο που και οι δύο αυτές κλάσεις βρίσκονται στο ίδιο πακέτο).
Ήρθε η ώρα να επιστρέψετε και διαβάστε πώς λειτουργεί στο Quarkus , και ως εκ τούτου (CDI). Επομένως, ανοίξτε τον οδηγό Contexts and Dependency Injection και στην ενότητα διαβάζουμε: «Δεν γίνεται αναζήτηση για μια τάξη φασολιών που δεν έχει σχολιασμό που να καθορίζει το φασόλι».
Ας δούμε την κατηγορία HelloService - πραγματικά δεν έχει τέτοιο σχολιασμό. Επομένως, πρέπει να προστεθεί για να μπορέσει το Quarkus να ψάξει και να βρει το φασόλι. Και επειδή πρόκειται για αντικείμενο χωρίς κατάσταση, μπορούμε εύκολα να προσθέσουμε τον σχολιασμό @ApplicationScoped ως εξής:
@ApplicationScoped
public class HelloService {
Σημείωση: Εδώ το περιβάλλον ανάπτυξης μπορεί να σας ζητήσει να προσθέσετε το απαιτούμενο πακέτο (δείτε τη γραμμή παρακάτω) και θα πρέπει να το κάνετε με μη αυτόματο τρόπο, ως εξής:
import javax.enterprise.context.ApplicationScoped;
Εάν έχετε αμφιβολίες σχετικά με το εύρος που πρέπει να χρησιμοποιηθεί στην περίπτωση που δεν καθορίζεται καθόλου για το αρχικό φασόλι, διαβάστε την τεκμηρίωση .
Τώρα προσπαθούμε ξανά να εκκινήσουμε την εφαρμογή με την εντολή ./mvnw compile quarkus:dev:
$ ./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]
Τώρα όλα πάνε χωρίς λάθη.
Έναρξη του εκσυγχρονισμένου helloworld
Όπως γράφεται στο αρχείο καταγραφής, ανοίξτε το στο πρόγραμμα περιήγησης :8080 (η προεπιλεγμένη αρχική σελίδα του Quarkus) και βλέπουμε αυτό:

Ρύζι. 4. Αρχική σελίδα του Quarku dev.
Ο σχολιασμός WebServlet για αυτήν την εφαρμογή περιέχει τον ακόλουθο ορισμό περιβάλλοντος:
@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {
Επομένως, πηγαίνουμε στο πρόγραμμα περιήγησης στο :8080/HelloWorld και βλέπουμε τα εξής:

Ρύζι. 5: Η σελίδα προγραμματισμού Quarkus για την εφαρμογή Hello World.
Λοιπόν, όλα λειτουργούν.
Τώρα ας κάνουμε αλλαγές στον κώδικα. Σημειώστε ότι η εντολή ./mvnw compile quarkus:dev εξακολουθεί να εκτελείται και δεν έχουμε σκοπό να τη σταματήσουμε. Τώρα ας προσπαθήσουμε να εφαρμόσουμε τις ίδιες - πολύ ασήμαντες - αλλαγές στον ίδιο τον κώδικα και να δούμε πώς το Quarkus κάνει τη ζωή πιο εύκολη για τον προγραμματιστή:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
Αποθηκεύστε το αρχείο και, στη συνέχεια, ανανεώστε την ιστοσελίδα για να δείτε το Hello Marco, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

Ρύζι. 6. Hello Marco σελίδα στο Quarkus dev.
Τώρα ας ελέγξουμε την έξοδο στο τερματικό:
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
Η ανανέωση σελίδας ενεργοποίησε τον εντοπισμό αλλαγών στον πηγαίο κώδικα και το Quarkus εκτέλεσε αυτόματα μια διαδικασία διακοπής έναρξης. Και όλα αυτά ολοκληρώθηκαν σε μόλις 0.371 δευτερόλεπτα (εδώ είναι, αυτή η «υπερταχεία υποατομική Java»).
Χτίζοντας το helloworld σε ένα πακέτο JAR
Τώρα που ο κώδικας λειτουργεί όπως θα έπρεπε, ας τον συσκευάσουμε με την ακόλουθη εντολή:
$ ./mvnw clean package
Αυτή η εντολή δημιουργεί δύο αρχεία JAR στο φάκελο /target: το αρχείο helloworld-.jar, το οποίο είναι ένα τυπικό τεχνούργημα που συναρμολογείται από την ομάδα Maven μαζί με τις κλάσεις και τους πόρους του έργου. Και το αρχείο helloworld-runner.jar, το οποίο είναι ένα εκτελέσιμο JAR.
Λάβετε υπόψη ότι αυτό δεν είναι uber-jar, καθώς όλες οι εξαρτήσεις απλώς αντιγράφονται στον φάκελο /target/lib (δεν είναι συσκευασμένοι σε αρχείο JAR). Επομένως, για να εκτελέσετε αυτό το JAR από άλλο φάκελο ή σε άλλο κεντρικό υπολογιστή, πρέπει να αντιγράψετε τόσο το ίδιο το αρχείο JAR όσο και τον φάκελο /lib εκεί, δεδομένου ότι το στοιχείο Class-Path στο αρχείο MANIFEST.MF στο πακέτο JAR περιέχει μια ρητή λίστα JAR από φακέλους lib
Για να μάθετε πώς να δημιουργείτε εφαρμογές uber-jar, ανατρέξτε στον οδηγό .
Εκκινήστε το helloworld συσκευασμένο σε JAR
Τώρα μπορούμε να εκτελέσουμε το JAR μας χρησιμοποιώντας την τυπική εντολή java:
$ 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]
Αφού γίνουν όλα αυτά, μεταβείτε στο πρόγραμμα περιήγησής σας στο :8080 και ελέγξτε ότι όλα λειτουργούν όπως θα έπρεπε.
Μεταγλώττιση του helloworld σε ένα εγγενές εκτελέσιμο αρχείο
Έτσι το helloworld μας τρέχει ως αυτόνομη εφαρμογή Java χρησιμοποιώντας εξαρτήσεις Quarkus. Αλλά μπορείτε να προχωρήσετε περισσότερο και να το μετατρέψετε σε εγγενές εκτελέσιμο αρχείο.
Εγκατάσταση του GraalVM
Πρώτα απ 'όλα, για αυτό πρέπει να εγκαταστήσετε τα απαραίτητα εργαλεία:
1. Κατεβάστε το GraalVM 19.2.0.1 από .
2. Αναπτύξτε το αρχείο λήψης:
$ tar xvzf graalvm-ce-linux-amd64-19.2.0.1.tar.gz
3. Μεταβείτε στο φάκελο untar.
4. Εκτελέστε την παρακάτω εντολή για λήψη και προσθήκη της εγγενούς εικόνας:
$ ./bin/gu install native-image
5. Καταχωρίστε τον φάκελο που δημιουργήθηκε στο βήμα 2 στη μεταβλητή περιβάλλοντος GRAALVM_HOME:
$ export GRAALVM_HOME={untar-folder}/graalvm-ce-19.2.0.1)
Για περισσότερες πληροφορίες και οδηγίες εγκατάστασης σε άλλα λειτουργικά συστήματα, ανατρέξτε στο εγχειρίδιο .
Δημιουργία του helloworld σε ένα εγγενές εκτελέσιμο αρχείο
Διαβάζοντας το εγχειρίδιο : «Τώρα ας δημιουργήσουμε ένα εγγενές εκτελέσιμο αρχείο για την εφαρμογή μας για να μειώσουμε τον χρόνο εκκίνησης και το μέγεθος του δίσκου. Το εκτελέσιμο αρχείο θα έχει όλα τα απαραίτητα για την εκτέλεση της εφαρμογής, συμπεριλαμβανομένου του JVM (ή μάλλον, μιας περικομμένης έκδοσης του, που περιέχει μόνο ό,τι απαιτείται για την εκτέλεση της εφαρμογής) και την ίδια την εφαρμογή μας."
Για να δημιουργήσετε ένα εγγενές εκτελέσιμο αρχείο, πρέπει να ενεργοποιήσετε το εγγενές προφίλ Maven:
$ ./mvnw package -Pnative
Η κατασκευή μας κράτησε ένα λεπτό και 10 δευτερόλεπτα και το τελικό αρχείο helloworld-runner f δημιουργήθηκε στον φάκελο /target.
Εκτελέστε το εγγενές εκτελέσιμο helloworld
Στο προηγούμενο βήμα, λάβαμε το εκτελέσιμο αρχείο /target/helloworld—runner. Τώρα ας το τρέξουμε:
$ ./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]
Ανοίξτε το ξανά στο πρόγραμμα περιήγησης :8080 και ελέγξτε ότι όλα λειτουργούν όπως θα έπρεπε.
Συνεχίζεται!
Πιστεύουμε ότι η μέθοδος εκσυγχρονισμού εφαρμογών Java χρησιμοποιώντας δυνατότητες Quarkus που συζητείται σε αυτήν την ανάρτηση (αν και χρησιμοποιώντας ένα απλό παράδειγμα) θα πρέπει να χρησιμοποιείται ενεργά στην πραγματική ζωή. Με αυτόν τον τρόπο, πιθανότατα θα αντιμετωπίσετε μια σειρά προβλημάτων, τα οποία θα αντιμετωπίσουμε εν μέρει στην επόμενη ανάρτηση, όπου θα μιλήσουμε για τον τρόπο μέτρησης της κατανάλωσης μνήμης για την αξιολόγηση των βελτιώσεων απόδοσης, ένα σημαντικό μέρος ολόκληρης της διαδικασίας εκσυγχρονισμού της εφαρμογής.
Πηγή: www.habr.com
