Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Ողջույն բոլորին այս բլոգում, ահա «Quarcus» շարքի չորրորդ գրառումը:

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Նախորդ գրառում այն մասին էր, թե ինչպես է Quarkus-ը համատեղում MicroProfile-ը և Spring-ը: Հիշենք դա Քվարկուս դիրքավորված է որպես «գերարագ ենթաատոմային Java», որը կոչվում է «Kubernetes-ի վրա հիմնված Java stack, որը հարմարեցված է GraalVM-ի և OpenJDK HotSpot-ի համար և հավաքված է լավագույն գրադարաններից և ստանդարտներից»: Այսօր մենք ցույց կտանք, թե ինչպես կարելի է արդիականացնել գոյություն ունեցող Java հավելվածները՝ օգտագործելով Quarkus-ի հնարավորությունները՝ օգտագործելով օրինակը helloworld հավելվածներ Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart պահոցից, որն օգտագործում է CDI և Servlet 3 տեխնոլոգիաները, որոնք աջակցվում են Quarkus-ի կողմից։

Այստեղ կարևոր է նշել, որ և՛ Quarkus-ը, և՛ JBoss EAP-ը շեշտում են գործիքների օգտագործումը, որոնք հնարավորինս հիմնված են ստանդարտների վրա: JBoss EAP-ով աշխատող հավելված չունե՞ք: Խնդիր չկա, այն կարելի է հեշտությամբ տեղափոխել ձեր ընթացիկ հավելվածի սերվերից դեպի JBoss EAP՝ օգտագործելով Red Hat Application Migration Toolkit. Որից հետո արդիականացված կոդի վերջնական և աշխատանքային տարբերակը հասանելի կլինի պահեստում github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus, մոդուլում Բարեւ աշխարհ.

Այս գրառումը գրելիս մենք օգտագործեցինք Quarkus ձեռնարկներ, հիմնականում Ստեղծելով ձեր առաջին հավելվածը և շենք ա Մայրենի գործադիր.

Եկեք ստանանք կոդը

Նախ, եկեք ստեղծենք պահեստի տեղական կլոնը 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. Բացեք բրաուզերում 127.0.0.1:8080 և մենք տեսնում ենք սա.

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 1. JBoss EAP Գլխավոր էջ:

4. Հետևեք ձեռնարկի հրահանգներին Կառուցեք և գործարկեք Quickstart-ըընդլայնել helloworld-ը և գործարկել (նախագծի արմատային պանակից) հետևյալ հրամանը.

$ mvn clean install wildfly:deploy

Այս հրամանը հաջողությամբ կատարելուց հետո գրանցամատյանում կտեսնենք հետևյալի նման մի բան.

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

Այսպիսով, helloworld հավելվածի առաջին տեղակայումը JBoss EAP-ում տևեց ընդամենը 8 վայրկյան:

Helloworld-ի փորձարկում

Գործելով խստորեն ըստ հրահանգների Մուտք գործեք Հավելված, բացեք բրաուզերում 127.0.0.1:8080/helloworld և մենք տեսնում ենք սա.

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 2. Օրիգինալ Hello World JBoss EAP-ից:

Փոփոխություններ կատարելը

Փոխեք ներածման պարամետրը createHelloMessage(String name) World-ից Marco:

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

Կրկին գործարկեք հետևյալ հրամանը.

$ mvn clean install wildfly:deploy

Այնուհետև մենք թարմացնում ենք էջը բրաուզերում և տեսնում ենք, որ տեքստը փոխվել է.

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 3. Բարև Մարկո JBoss EAP-ում:

Հետ դարձրեք helloworld տեղակայումը և անջատեք JBoss EAP-ը

Սա ընտրովի է, բայց եթե ցանկանում եք չեղարկել տեղակայումը, կարող եք դա անել հետևյալ հրամանով.

$ mvn clean install wildfly:undeploy

Ձեր JBoss EAP օրինակը փակելու համար պարզապես սեղմեք Ctrl+C տերմինալի պատուհանում:

Helloworld-ի արդիականացում

Հիմա եկեք արդիականացնենք բնօրինակ helloworld հավելվածը:

Ստեղծեք նոր մասնաճյուղ

Quickstart նախագծի ավարտից հետո մենք ստեղծում ենք նոր աշխատանքային մասնաճյուղ.

$ 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-ի յուրաքանչյուր կախվածության համար:
  • Quarkus-maven-plugin-ը պատասխանատու է հավելվածի փաթեթավորման և զարգացման ռեժիմի ապահովման համար:
  • Հավելվածի գործադիրներ ստեղծելու բնիկ պրոֆիլը:

Բացի այդ, մենք ձեռքով կատարում ենք հետևյալ փոփոխությունները pom.xml-ում.

  1. Պիտակը դուրս քաշելով բլոկից և դրեք այն պիտակի վերևում . Քանի որ հաջորդ քայլում մենք կհեռացնենք բլոկը , ապա դուք պետք է խնայեք .
  2. Բլոկի հեռացում , որովհետև Quarkus-ի հետ աշխատելիս այս հավելվածին այլևս պետք չի լինի JBoss-ի ծնողական պոմպ:
  3. Ավելացնել պիտակ և տեղադրել այն պիտակի տակ . Դուք կարող եք նշել տարբերակի համարը, որը ցանկանում եք:
  4. Պիտակի հեռացում , քանի որ այս հավելվածն այլևս ՊԱՏԵՐԱԶՄ չէ, այլ սովորական 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 տարբերակի առանց այդ տարբերակը տեղադրելու:
  • 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-ին անհրաժեշտ է HelloService-ի ներարկված օրինակ, և այն հնարավոր չէ գտնել (չնայած այս երկու դասերն էլ նույն փաթեթում են):

Ժամանակն է վերադառնալու փաստաթղթավորում և կարդացեք, թե ինչպես է այն աշխատում Quarkus-ում Ներարկել, եւ, հետեւաբար Համատեքստեր և կախվածության ներարկում (CDI): Հետևաբար, բացեք Contexts and Dependency Injection ուղեցույցը և բաժնում Bean Discovery մենք կարդում ենք. «Լոբի դասը, որը չունի լոբի սահմանող ծանոթագրություն, չի որոնվում»։

Եկեք նայենք HelloService դասին, այն իսկապես չունի նման ծանոթագրություն: Հետեւաբար, այն պետք է ավելացվի, որպեսզի Quarkus-ը կարողանա փնտրել և գտնել լոբի: Եվ քանի որ սա քաղաքացիություն չունեցող օբյեկտ է, մենք կարող ենք հեշտությամբ ավելացնել @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. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 4. Quarcus dev-ի մեկնարկային էջ:

Այս հավելվածի WebServlet-ի անոտացիան պարունակում է հետևյալ համատեքստի սահմանումը.

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

Հետևաբար, մենք բրաուզերում գնում ենք դեպի 0.0.0.0:8080/HelloWorld և մենք տեսնում ենք հետևյալը.

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 5. Quarkus մշակող էջ Hello World հավելվածի համար:

Դե, ամեն ինչ աշխատում է:

Հիմա եկեք փոփոխություններ կատարենք կոդի մեջ։ Նկատի ունեցեք, որ ./mvnw compile quarkus:dev հրամանը դեռ աշխատում է, և մենք մտադիր չենք դադարեցնել այն: Հիմա եկեք փորձենք կիրառել նույն՝ շատ չնչին փոփոխությունները հենց կոդի մեջ և տեսնենք, թե ինչպես է Quarkus-ը հեշտացնում ծրագրավորողի կյանքը.

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

Պահպանեք ֆայլը և այնուհետև թարմացրեք վեբ էջը՝ Բարև Մարկո տեսնելու համար, ինչպես ցույց է տրված ստորև ներկայացված սքրինշոթում.

Quarkus. հավելվածի արդիականացում՝ օգտագործելով Helloworld-ը որպես օրինակ JBoss EAP Quickstart-ից

Բրինձ. 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-ը ավտոմատ կերպով կատարեց «stop-start» ընթացակարգը: Եվ այս ամենն ավարտվեց ընդամենը 0.371 վայրկյանում (այստեղ այն «գերարագ ենթատոմային Java» է):

Helloworld-ի կառուցումը JAR փաթեթի մեջ
Այժմ, երբ կոդը աշխատում է այնպես, ինչպես պետք է, եկեք փաթեթավորենք այն հետևյալ հրամանով.

$ ./mvnw clean package

Այս հրամանը /target թղթապանակում ստեղծում է երկու JAR ֆայլ՝ helloworld-.jar ֆայլը, որը ստանդարտ արտեֆակտ է, որը հավաքվել է Maven թիմի կողմից նախագծի դասերի և ռեսուրսների հետ միասին: Եվ helloworld-runner.jar ֆայլը, որը գործարկվող JAR է:

Խնդրում ենք նկատի ունենալ, որ սա uber-jar չէ, քանի որ բոլոր կախվածությունները պարզապես պատճենվում են /target/lib թղթապանակում (փաթեթավորված չէ JAR ֆայլում): Հետևաբար, այս JAR-ը մեկ այլ թղթապանակից կամ այլ հոսթից գործարկելու համար անհրաժեշտ է պատճենել և՛ JAR ֆայլը, և՛ /lib թղթապանակը այնտեղ, հաշվի առնելով, որ JAR փաթեթի MANIFEST.MF ֆայլի Class-Path տարրը պարունակում է. JAR-ների բացահայտ ցուցակագրում lib թղթապանակներից
Սովորելու համար, թե ինչպես ստեղծել uber-jar հավելվածներ, խնդրում ենք ծանոթանալ ձեռնարկին 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]

Այս ամենն ավարտելուց հետո անցեք ձեր բրաուզերը՝ հասցեով 0.0.0.0:8080 և ստուգեք, որ ամեն ինչ աշխատում է այնպես, ինչպես պետք է:

Helloworld-ի կազմումը բնիկ գործարկվող ֆայլի մեջ

Այսպիսով, մեր helloworld-ն աշխատում է որպես ինքնուրույն Java հավելված՝ օգտագործելով Quarkus-ի կախվածությունները: Բայց դուք կարող եք ավելի հեռուն գնալ և այն վերածել բնիկ գործարկվող ֆայլի:

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

Добавить комментарий