Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Бул блогдун баарына салам, бул жерде Quarkus сериясындагы төртүнчү билдирүү!

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Мурунку пост Quarkus MicroProfile менен Жазды кантип айкалыштырганы жөнүндө болду. Ошону эске сала кетели кваркус "Ультра тез субатомдук Java" катары жайгашкан, башкача айтканда, "GraalVM жана OpenJDK HotSpot үчүн ылайыкташтырылган жана мыкты китепканалардан жана стандарттардан чогултулган Kubernetes-багытталган Java стек." Бүгүн биз мисалды колдонуп, Quarkus мүмкүнчүлүктөрүн колдонуу менен учурдагы Java тиркемелерин кантип модернизациялоону көрсөтөбүз Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart репозиторийинен helloworld тиркемелери, ал Quarkus тарабынан колдоого алынган CDI жана Servlet 3 технологияларын колдонот.

Бул жерде белгилей кетүү маанилүү, Quarkus да, JBoss EAP да мүмкүн болушунча стандарттарга негизделген куралдарды колдонууга басым жасашат. JBoss EAPде иштеген колдонмоңуз жокпу? Эч кандай көйгөй жок, аны колдонуу менен учурдагы колдонмо сервериңизден JBoss EAPке оңой көчүрсө болот Red Hat Колдонмонун Миграция Куралдары. Андан кийин модернизацияланган коддун акыркы жана жумушчу версиясы репозиторийде жеткиликтүү болот github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus, модулда салам дүйнө.

Бул постту жазып жатканда биз колдонгон Quarkus колдонмолору, негизинен Биринчи Колдонмоңузду түзүү жана имарат а Native Executable.

Кодду алалы

Биринчиден, репозиторийдин локалдык клонун түзөлү 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/

Келгиле, оригиналдуу дүйнөнүн кантип иштээрин карап көрөлү

Чынында, бул тиркеменин маңызы аталышынан көрүнүп турат, бирок биз анын кодун илимий жактан жаңыртабыз. Ошондуктан, адегенде, анын баштапкы түрүндө бул арызды карап көрөлү.

Жарык дүйнөнү жайылтуу

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. Браузерде ачыңыз 127.0.0.1:8080 жана биз муну көрүп жатабыз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 1. JBoss EAP Башкы бети.

4. Колдонмодогу көрсөтмөлөрдү аткарыңыз Ыкчам баштоону куруу жана жайылтуу: helloworld кеңейтүү жана (долбоордун түпкү папкасынан) төмөнкү буйрукту иштетиңиз:

$ mvn clean install wildfly:deploy

Бул буйрукту ийгиликтүү аткаргандан кийин, биз журналдан төмөнкүдөй нерсени көрөбүз:

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

Ошентип, JBoss EAP боюнча helloworld тиркемесин биринчи жайылтуу 8 секунддан бир аз ашык убакытты алды.

Сыноо дүйнөсү

Көрсөтмөлөргө ылайык иш-аракет кылуу Колдонмого кирүү, браузерде ачуу 127.0.0.1:8080/helloworld жана биз муну көрүп жатабыз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 2. JBoss EAP оригиналдуу Hello World.

Өзгөртүүлөрдү киргизүү

CreateHelloMessage(String name) киргизүү параметрин World дегенден Маркого өзгөртүңүз:

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

Төмөнкү буйрукту кайра иштетиңиз:

$ mvn clean install wildfly:deploy

Андан кийин биз браузерде баракты жаңыртып, тексттин өзгөргөнүн көрөбүз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 3. JBoss EAPдеги салам Марко.

Helloworld жайгаштыруусун артка кайтарыңыз жана JBoss EAPди өчүрүңүз

Бул милдеттүү эмес, бирок сиз жайылтууну жокко чыгаргыңыз келсе, муну төмөнкү буйрук менен кыла аласыз:

$ mvn clean install wildfly:undeploy

JBoss EAP инстанцияңызды өчүрүү үчүн терминал терезесинде жөн гана Ctrl+C басыңыз.

Жакшы дүйнөнү жаңыртуу

Эми оригиналдуу 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 көбүнчө жаңы версияларды чыгарат, кайсы версия эң акыркы экенин веб-сайттан биле аласыз github.com/quarkusio/quarkus/releases/latest.

Жогорудагы буйрук pom.xmlге төмөнкү элементтерди киргизет:

  • Менчик , ал Quarkus версиясын колдонот.
  • Блок Кваркустун ар бир көз карандылыгы үчүн версияны кошпоо үчүн, Quarkus BOM (материалдар эсеби) импорттоо.
  • Quarkus-maven-плагин тиркемени таңгактоо жана иштеп чыгуу режимин камсыз кылуу үчүн жооптуу.
  • Колдонмонун аткарылуучу файлдарын түзүү үчүн жергиликтүү профиль.

Мындан тышкары, биз кол менен pom.xml төмөнкү өзгөртүүлөрдү киргизебиз:

  1. Теги чыгарып блоктон жана аны тегтин үстүнө коюңуз . Анткени кийинки кадамда блокту алып салабыз , анда сактоо керек .
  2. Блокту алып салуу , анткени Quarkus менен иштеп жатканда, бул колдонмо мындан ары JBoss'дун ата-эне помуна муктаж болбойт.
  3. Тег кошуу жана аны тегтин астына коюңуз . Сиз каалаган версия номерин көрсөтө аласыз.
  4. Тегди алып салуу , анткени бул колдонмо мындан ары WAR эмес, кадимки JAR.
  5. Биз төмөнкү көз карандылыктарды өзгөртөбүз:
    1. javax.enterprise:cdi-api көз карандылыгын io.quarkus:quarkus-arc кылып өзгөртүү, алып салуу каралган , анткени (документтерге ылайык) бул Quarkus кеңейтүүсү CDI көз карандылыктарынын инжекциясын камсыз кылат.
    2. org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec көз карандылыгын io.quarkus:quarkus-undertow кылып өзгөртүү, алып салуу каралган , анткени (документтерге ылайык) бул Quarkus кеңейтүүсү сервлеттерге колдоо көрсөтөт.
    3. Биз org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec көз карандылыгын алып салабыз, анткени ал биз жаңы эле өзгөрткөн көз карандылыктар менен келет.

Бардык өзгөртүүлөр менен pom.xml файлынын версиясы даректе жайгашкан github.com/mrizzi/jboss-eap-quickstarts/blob/quarkus/helloworld/pom.xml.

Эске салсак, жогорудагы mvn io.quarkus:quarkus-maven-plugin:0.23.2:create буйругу pom.xml файлын гана өзгөртпөстөн, долбоорго бир катар компоненттерди, атап айтканда, төмөнкү файлдарды жана папкаларды кошот:

  • mvnw жана mvnw.cmd файлы жана .mvn папкасы: Maven Wrapper сизге берилген Maven версиясынын Maven долбоорлорун ошол версияны орнотпостон иштетүүгө мүмкүндүк берет.
  • Докер папкасы (src/main/ каталогунда): Бул жергиликтүү жана jvm режимдери үчүн Dockerfiles үлгүсүн камтыйт (.dockerignore файлы менен бирге).
  • Ресурстар папкасы (src/main/ каталогунда): Бул бош application.properties файлын жана үлгү Quarkus index.html баштапкы барагын камтыйт (көбүрөөк маалымат үчүн модернизацияланган helloworldду иштетүүнү караңыз).

Helloworldду ишке киргизиңиз
Тиркемени сынап көрүү үчүн биз Quarkus'ту иштеп чыгуу режиминде иштеткен 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] 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 HelloWorldServlet классынын мүчөсү болгон HelloService классын көрсөтөт (java мүчөсү: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). Көйгөй HelloWorldServlet HelloService инъекциялык нускасын талап кылат жана аны табуу мүмкүн эмес (бул класстардын экөө тең бир пакетте болсо да).

Кайтууга убакыт келди документтер жана Кваркуста кантип иштээрин окуп чыгыңыз Дарыны, демек Контексттер жана көз карандылыкты киргизүү (CDI). Ошондуктан, Контексттерди жана көз карандылыкты киргизүү боюнча колдонмону жана бөлүмдү ачыңыз Bean Discovery биз окуйбуз: "Буурчакты аныктоочу аннотациясы жок буурчак классы изделбейт."

Келгиле, HelloService классын карап көрөлү - чындыгында мындай аннотация жок. Ошондуктан, Кваркус төө буурчакты издеп, таба алгыдай кылып кошуу керек. Жана бул жарандыгы жок объект болгондуктан, биз оңой эле @ApplicationScoped аннотациясын төмөнкүдөй кошо алабыз:

@ApplicationScoped
public class HelloService {

Эскертүү: бул жерде иштеп чыгуу чөйрөсү сизден талап кылынган пакетти кошууну суранышы мүмкүн (төмөндөгү сапты караңыз) жана сиз муну төмөнкүдөй кол менен жасашыңыз керек болот:

import javax.enterprise.context.ApplicationScoped;

Эгерде сиз булак төө буурчак үчүн такыр көрсөтүлбөгөн учурда кайсы көлөмдү колдонуу керектиги жөнүндө күмөн санасаңыз, документтерди окуп чыгыңыз. JSR 365: Java 2.0 үчүн контексттер жана көз карандылык инъекциясы — Демейки масштаб.

Эми биз дагы ./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]

Азыр баары катасыз жүрүп жатат.

Модернизацияланган мейкиндикти ишке киргизүү
Журналда жазылгандай, аны браузерде ачыңыз 0.0.0.0:8080 (демейки Quarkus баштапкы бет) жана биз муну көрүп жатабыз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 4. Quarkus dev баштапкы бет.

Бул колдонмо үчүн WebServlet аннотациясында төмөнкү контексттин аныктамасы бар:

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

Ошондуктан, биз браузерге барабыз 0.0.0.0:8080/HelloWorld жана биз төмөнкүлөрдү көрүп жатабыз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 5: Hello World тиркемеси үчүн Quarkus dev барагы.

Ооба, баары иштейт.

Эми кодго өзгөртүүлөрдү киргизели. Белгилей кетсек, ./mvnw compile quarkus:dev буйругу дагы эле иштеп жатат жана биз аны токтотууга ниетибиз жок. Эми келгиле, коддун өзүнө окшош өзгөртүүнү колдонууга аракет кылалы жана Quarkus иштеп чыгуучунун жашоосун кантип жеңилдеткенин көрөлү:

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

Төмөнкү скриншотто көрсөтүлгөндөй, Hello Marco көрүү үчүн файлды сактап, анан веб-баракты жаңыртыңыз:

Quarkus: JBoss EAP Quickstartтын мисалы катары Hellouorldду колдонуу менен колдонмону модернизациялоо

Райс. 6. Салам Марко барагы 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").

JAR пакетине мээрман дүйнөнү куруу
Эми код каалагандай иштейт, келгиле, аны төмөнкү буйрук менен пакеттейли:

$ ./mvnw clean package

Бул буйрук /target папкасында эки JAR файлын түзөт: helloworld-.jar файлы, бул долбоордун класстары жана ресурстары менен бирге Maven командасы тарабынан чогултулган стандарттык артефакт. Жана аткарылуучу JAR болгон helloworld-runner.jar файлы.

Сураныч, бул uber-jar эмес экенин эске алыңыз, анткени бардык көз карандылыктар жөн гана /target/lib папкасына көчүрүлөт (JAR файлына топтолгон эмес). Ошондуктан, бул JARды башка папкадан же башка хостто иштетүү үчүн, JAR пакетиндеги MANIFEST.MF файлындагы Class-Path элементи камтыганын эске алып, JAR файлынын өзүн да, ал жердеги /lib папкасын да көчүрүп алышыңыз керек. lib папкаларынан JARлардын ачык тизмеси
Uber-jar тиркемелерин кантип түзүүнү үйрөнүү үчүн, окуу куралын караңыз Uber-Жар түзүү.

JAR ичинде пакеттелген helloworldду ишке киргизиңиз

Эми биз стандарттуу java буйругун колдонуп JARыбызды иштете алабыз:

$ 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]

Мунун баары аткарылгандан кийин, браузериңизге өтүңүз 0.0.0.0:8080 жана бардыгы талаптагыдай иштеп жатканын текшериңиз.

helloworld түпнуска аткарылуучу файлга компиляциялоо

Ошентип, биздин helloworld Quarkus көз карандылыгын колдонгон өз алдынча Java тиркемеси катары иштейт. Бирок сиз андан ары барып, аны жергиликтүү аткарылуучу файлга айландырсаңыз болот.

GraalVM орнотулууда
Биринчиден, бул үчүн керектүү шаймандарды орнотуу керек:

1. GraalVM 19.2.0.1 жүктөп алыңыз github.com/oracle/graal/releases/tag/vm-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]

Аны кайра браузерде ачыңыз 0.0.0.0:8080 жана бардыгы талаптагыдай иштеп жатканын текшериңиз.

Уландысы бар!

Бул постто талкууланган Quarkus мүмкүнчүлүктөрүн колдонуу менен Java тиркемелерин модернизациялоо ыкмасын (жөнөкөй мисал менен болсо да) реалдуу жашоодо жигердүү колдонуу керек деп эсептейбиз. Муну менен сиз бир катар көйгөйлөргө туш болушуңуз мүмкүн, аларды биз кийинки постто жарым-жартылай чечебиз, мында биз колдонмону модернизациялоо процессинин маанилүү бөлүгү болгон иштөөнүн жакшырышына баа берүү үчүн эстутум керектөөсүн кантип өлчөө керектиги жөнүндө сүйлөшөбүз.

Source: www.habr.com

Комментарий кошуу