Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Բարև ձեզ այս բլոգում, և հետ դուք չորրորդ գրառումն է Quarkus-ի մասին շարքի:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

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

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

Այս գրառումը գրելիս օգտագործվել են Quarkus-ի ուղեցույցներ, հիմնականում Creating Your First Application և Building a Native Executable.

Արդյունք ստանալ

Նախ առաջինը ստեղծենք տեղական կլոն JBoss EAP quickstarts-ին: $ 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) սկսվել է 3315ms ընթացքում - Սկսվել է 306-ի 527 ծառայությունների (321 ծառայություններն են ձգված, ծPasiv և պահանջագրված)

3. Բացեք բրաուզերում

:8080 և տեսեք այսը: 127.0.0.1Նկար. 1. JBoss EAP-ի գլխավոր էջը:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

4. Հետևեք ուղեցույցում

Build and Deploy the Quickstart : արդիականացրեք helloworld-ը և կատարեք (նախագծի հիմնական կոլլում) հետևյալ հրամանը:$ mvn clean install wildfly:deploy

Սա կատարելուց հետո կհայտնվի այսպիսի մոտավորապես հետևյալը:

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

Ամեն դեպքում, առաջին անգամ է, երբ ծրագիրն առաջին անգամ գործում է JBoss EAP-ում, մի քիչ ավելի քան 8 վայրկյան:

Թեստավորում helloworld-ը:

Ուսումնասիրելով ուղեցույցով

Access the Application , բացե՛ք բրաուզերում:8080/helloworld և տեսեք հետևյալը: 127.0.0.1:8080/helloworld и видим вот что:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Պ Տվյալներ 2. JBoss EAP-ի սկզբնական Hello World:

Մուտք ենք գործում փոփոխություններ

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

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

ՄAgain կատարում ենք հաջորդ հանձնարարականը:

Սա կատարելուց հետո կհայտնվի այսպիսի մոտավորապես հետևյալը:

Այնուհետև թարմացնում ենք էջը զննարկչում և տեսնում, որ տեքստը փոխված է:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Պ Տվյալներ 3. Hello Marco 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.

Վերը նշված հանձնարարականն insert pom.xml ֆայլում հետևյալ տարրերը:

  • հատկությունը, որը նշում է օգտագործվող Quarkus-ի տարբերակը:
  • բլոկը Quarkus BOM (bill of materials) ներմուծելու համար, որպեսզի Quarkus-ի յուրաքանչյուր կախվածության համար տարբերակ ավելացնելիս:
  • quarkus-maven-plugin պլագինը, որը պատասխանատու է հավելվածի փաթեթավորման և զարգացած նորարարություն տրամադրելու համար:
  • native պրոֆիլ, որը թույլ է տալիս ստեղծել հավելվածի կատարվող ֆայլեր:

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

  1. Վերահսկում ենք պիտակն բլոկից և տեղադրում այն պիտակից բարձր: Որպեսզի հաջորդ քայլում բլոկը ջնջենք, անհրաժեշտ է պահպանել :
  2. Ջնջում ենք բլոկը, քանի որ Quarkus-ի հետ աշխատելու ժամանակ այս հավելվածին այլևս JBoss-ի ծնող pom պետք չէ:
  3. Ավելացնում ենք պիտակն ու տեղադրում այն պիտակի տակ: Դուք կարող եք նշել ցանկացած տարբերակ:
  4. Ջնջում ենք պիտակը, քանի որ այս հավելվածը այլևս WAR չէ, այլ սովորական JAR:
  5. Փոփոխում ենք հետևյալ կախվածությունները:
    1. Փոխում ենք javax.enterprise:cdi-api կախվածությունը io.quarkus:quarkus-arc-ի, provided ջնջելով, քանի որ (փաստաթղթերում համաձայն) այս Quarkus ընդլայնումը ապահովում է CDI կախվածության ներարկումը:
    2. Փոխում ենք org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec կախվածություն io.quarkus:quarkus-undertow, provided ջնջելով, քանի որ (փաստաթղթերում համաձայն) այս Quarkus ընդլայնումը ապահովում է Servlet աջակցություն:
    3. Ջնջում ենք org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec կախվածությունը, քանի որ դրանք գալիս են այն կախվածություններից, որոնք刚刚修改ել ենք:

Պոմ.xml ֆայլի տարբերակը բոլոր փոփոխություններով գտնվում է հասցեում github.com/mrizzi/jboss-eap-quickstarts/blob/quarkus/helloworld/pom.xml.

Հակառակ ուշադրության ուշադրություն հատկացրեք, որ վերևում ներկայացված mvn io.quarkus:quarkus-maven-plugin:0.23.2:create հրամանը ոչ միայն փոփոխում է pom.xml ֆայլը, այլ նաև project-ին ավելացնում մի շարք բաղադրիչներ, մասնավորապես, հետևյալ ֆայլերն ու թղթապանակները՝

  • mvnw և mvnw.cmd ֆայլը և .mvn թղթապանակը: Maven Wrapper-ը թույլ է տալիս գործարկել Maven project-ներ որոշակի Maven տարբերակով առանց այդ տարբերակի տեղադրման:
  • docker թղթապանակը (src/main/-ում): այստեղ գտնվում են native և jvm ռեժիմների Dockerfile ֆայլերի օրինակները (միասին .dockerignore ֆայլի հետ):
  • resources թղթապանակը (src/main/-ում): այստեղ գտնվում է application.properties դատարկ ֆայլը և Quarkus-ի index.html стартային աշխատանքի էջի օրինակ (հավաստանման համար տեսեք Run the modernized helloworld):

Կհրավիրենք helloworld
Ընդեղքելու համար application-ը, օգտագործում ենք quarkus:dev հրամանը, որը запускает Quarkus-ը development mode ռեժիմով (միասին տեսեք այս բաժինը ցուցումների մեջ) Development Mode).

注释: այս քայլը ակնկալվում է, որ կհանգեցնի սխալի, քանի որ մենք դեռ չենք կատարել բոլոր անհրաժեշտ փոփոխությունները:

Հիմա запускаем команду, чтобы проверить, как это сработает:

$ ./mvnw compile quarkus:dev
[INFO] Projekte scanning...
[INFO]
[INFO] --------------------------------
[INFO] Quickstart-ის აშენება: helloworld quarkus
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
[INFO] ფილტრირებული მონაცემების ასლი 'UTF-8' დაშიფრვით.
[INFO] 2 რესურსის ასლის გადმოცემა
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
[INFO] კომპილაციისთვის არაფერი არაა - ყველა კლასები აპდატებულია
[INFO]
[INFO] --- quarkus-maven-plugin:0.23.2:dev (default-cli) @ helloworld ---
გაიგზავნება ტრანსპორტ dt_socket მისამართზე: 5005
INFO  [io.qua.dep.QuarkusAugmentor] დაწყება quarkus-ის გაფართოება
INFO  [org.jbo.threads] JBoss Threads ვერსია 3.0.0.Final
ERROR [io.qua.dev.DevModeMain] quarkus-ის დაწყება ვერ მოხერხდა: java.lang.RuntimeException: io.quarkus.builder.BuildException: აშენების შეცდომა: აშენება სრულყოფილად ვერ განხორციელდა შეცდომების გამო
	[error]: აშენების ნაბიჯი io.quarkus.arc.deployment.ArcProcessor#validate მოიტანა გამონაკლისი: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: არასაკმარისი დამოკიდებულება org.jboss.as.quickstarts.helloworld.HelloService ტიპისთვის და შემოღებული [@Default]
	- java წევრი: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- გაწვდილი 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)
Причина: javax.enterprise.inject.UnsatisfiedResolutionException: არასაკმარისი დამოკიდებულება org.jboss.as.quickstarts.helloworld.HelloService ტიპისთვის და შემოღებული [@Default]
	- java წევრი: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService
	- გაწვდილი 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 member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). პრობლემა ისაა, რომ HelloWorldServlet-ს ინექცირებული HelloService სჭირდება, მაგრამ მისი ნახვა ვერ მოხერხდება (თუმცა ეს ორი კლასი ერთ და იგივე პატერნშია).

ყველაზე სწორი დროა დაბრუნდეთ փաստաթղթավորումը და წაიკითხოთ, როგორ მუშაობს Quarkus-ში Inject, შესაბამისად არის Contexts and Dependency Injection (CDI). ამიტომ ვხსნით Contexts and Dependency Injection-ის სახელმძღვანელოს და მუხლში Bean Discovery ვკითხულობთ: «Bean კლასი, რომელსაც არ აქვს განსაზღვრული bean ანოტაცია, არ საძიებლი».

Փորձարկում ենք HelloService դասը՝ առանց այդAnnotations: Դրան ընդառաջ, հարկավոր է ավելացնել, որպեսզի Quarkus-ը կարողանա որոնել և գտնել bean-ը: Քանի որ սա stateless օբյեկտ է, կարող ենք ավելացնել @ApplicationScoped annotation-ը հետևյալ կերպ:

@ApplicationScoped
public class HelloService {

注释: այստեղ մշակման միջավայր կարող է խնդրել ձեզ ավելացնել անհրաժեշտ փաթեթը (տես ստորև նշված տողի), և դա պետք է անեք ձեռքով, հետևյալ կերպ:

import javax.enterprise.context.ApplicationScoped;

Եթե չեք վստահում, թե որն է հարկավոր օգտագործել scope, երբ սկզբնական bean-ը այն ամբողջովին չկա, ուսումնասիրեք փաստաթղթաբանությունը: JSR 365: Contexts and Dependency Injection for Java 2.0—Default scope.

Այժմ կրկին փորձում ենք գործարկել ծրագիրը հրամանով .\mvnw compile quarkus:dev:

$ .\mvnw compile quarkus:dev
[INFO] Projects are being scanned...
[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.qua.quarkus] (main) Installed features: [cdi]

Այժմ ամեն ինչ անցնում է առանց սխալների:

Սկսում ենք արդիականացված helloworld-ը:
Ինչպես նշված է լոգում, բացում ենք տեսbrowser-ում: 0.0.0.0:8080 (Quarkus-ի իսկական էջը) և տեսնում ենք հետևյալ.

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Պատ. 4. Quarkus dev-ի սկրին;

Այս ծրագրի WebServlet annotation-ում նշված է հետևյալ կոնտեքստի սահմանումը:

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

Ուրեմն գնանք browser-ում՝ 0.0.0.0:8080/HelloWorld և տեսնում ենք հետևյալ:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Պատ. 5: Quarkus dev-ի էջը Hello World-ի համար:

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

Այժմ կատարում ենք փոփոխություններ կոդում: Գիտեք, որ հրամանի .\mvnw compile quarkus:dev-ն դեռևս աշխատում է, և մենք չենք պատրաստվում այն կանգնեցնել: Այժմ փորձելու ենք նույնպիսի պարզ փոփոխություններ կատարել կոդի վրա և տեսնենք, թե ինչպես Quarkus-ը օգնում է ծրագրավորողներին:

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

Պահպանեք ֆայլը և ապա թարմացրեք վեբ էջը՝ տեսնելու համար Hello Marco գրառումը, ինչպես նշված է ներքևի սքանչարժան էջում:

Quarkus: ծրագրերի արդիականացում JBoss EAP Quickstart-ի օրինակով

Պատ. 6. Hello Marco էջը Quarkus dev-ում:

Այժմ ստուգենք ելքը տերմինալում:

INFO  [io.qua.dev] (vert.x-worker-thread-3) Դիտարկվել են աղբյուրի ֆայլերի փոփոխություն, վերակազմված է [\/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-ը կանգնած է 0.003 сек.
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Հաջորդում Quarkus աճեցման գործընթացը
INFO  [io.qua.dep.QuarkusAugmentor] (vert.x-worker-thread-3) Quarkus աճեցումը ավարտվել է 232մս
INFO  [io.quarkus] (vert.x-worker-thread-3) Quarkus 0.23.2 սկսվեց 0.257 сек պասն։  Ակնկալվում է՝ http:\/\/0.0.0.0:8080
INFO  [io.quarkus] (vert.x-worker-thread-3) dev պրոֆիլը միացված է։ Լիարժեք կոդային մշակումը միացված է։
INFO  [io.quarkus] (vert.x-worker-thread-3) Տեղադրված ֆունկցիաներ: [cdi]
INFO  [io.qua.dev] (vert.x-worker-thread-3) Տաք փոխարինման ընդհանուր ժամանակ: 0.371сек

Զուգահեռի էջը դիտարկել է փոփոխություններ աղբյուրի կոդում, և 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 папքը, հաշվի առնելով, որ 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 սկսվեց 0.673 վայրկյանում։  Ակնկալվում է՝ http:\/\/0.0.0.0:8080
INFO  [io.quarkus] (main) պրոֆիլն ակտիվացվեց:
INFO  [io.quarkus] (main) Տեղադրված ֆունկցիաներ: [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-ը բնիկ գործարկման ֆայլի վերածել
Ուսումնասիրեք ձեռնարկ Բնիկ գործարկման ֆայլի ստեղծում—Բնիկ գործարկման ֆայլ ստեղծելով: «Այդպես, ստեղծենք մեր application's համար տեղական կատարման ֆայլ, որպեսզի կրճատենք դրա բեռնման ժամանակն ու տեղը սկավառակում: Կատարման ֆայլը կունենա ամեն անհրաժեշտ բան application's աշխատելու համար, ներառյալ JVM մեքենան (точнее, դրա կրճատված տարբերակը, որը պարունակում է միայն այն, ինչ անհրաժեշտ է application's իրականացնելու համար) և մեր application»-ը։

Մանրակրկիտ կատարման ֆայլ ստեղծելու համար պետք է ընդգրկել native պրոֆիլ Maven-ում.

$ ./mvnw package -Pnative

Մեր հավաքումը տևեց մեկ րոպե և 10 վայրկյան, իսկ վերջնական ֆայլ helloworld—runner ստեղծվել է `/target` ֆոլդերում.

Հասարակուծս տեղական կատարման ֆայլ helloworld-ը։

Առաջին քայլում ստացել ենք կատարման ֆայլ `/target/helloworld—runner`. Այժմ թողնենք այն սկսել.

$ ./target/helloworld-<version>-runner
INFO  [io.quarkus] (main) Quarkus 0.23.2 սկսվեց 0.006 վրկ-ում: Ակնհայտ: http://0.0.0.0:8080
INFO  [io.quarkus] (main) Պրոֆիլ prod ակտիվացված.
INFO  [io.quarkus] (main) Տեղադրված առանձնահատկություններ: [cdi]

Իրականում բացում ենք բրաուզերում 0.0.0.0:8080 և ստուգում ենք, որ ամեն ինչ աշխատում է ինչպես հարկն է.

Շարունակությունը գալիս է!

Մենք կարծում ենք, որ այս հոդվածում քննարկված (հաշված պարզ օրինակ) Java հավելվածների արդիականացման մեթոդը, օգտագործելով Quarkus-ի հնարավորությունները, պետք է ակտիվորեն կիրառվի իրական կյանքում: Այս գործընթացում, դուք հավանաբար, հանդիպելու եք մի շարք խնդիրների, որոնց լուծումը մասնակիորեն քննարկելու ենք հաջորդ հոդվածում, որտեղ խոսելու ենք, թե ինչպես չափել հիշողության օգտագործումը `կատարողականության բարելավումը գնահատելու համար`, ամբողջական առաջադիմության կարևոր մասը:

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster