ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሰላም በዚህ ብሎግ ላይ ላሉ ሁሉ፣ የኳርኩስ ተከታታይ አራተኛው ልጥፍ ይኸውና!

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ቀዳሚ ልጥፍ ኳርኩስ ማይክሮፕሮፋይልን እና ስፕሪንግን እንዴት እንደሚያጣምር ነበር። ያንን እናስታውስህ ኩርኩስ እንደ “እጅግ በጣም ፈጣን ሱባቶሚክ ጃቫ”፣ aka “Kubernetes-oriented Java stack፣ ለ GraalVM እና OpenJDK HotSpot የተዘጋጀ እና ከምርጥ ቤተ-መጻሕፍት እና ደረጃዎች የተሰበሰበ ነው። ዛሬ ያሉትን የጃቫ አፕሊኬሽኖች የኳርኩስን አቅም በመጠቀም እንዴት ማዘመን እንደምንችል ምሳሌውን እናሳያለን። helloworld መተግበሪያዎች ከRed Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart ማከማቻበኳርኩስ የሚደገፉ CDI እና Servlet 3 ቴክኖሎጂዎችን የሚጠቀም።

እዚህ ላይ ሁለቱም ኳርኩስ እና JBoss EAP አጽንዖት የሚሰጡት በተቻለ መጠን ደረጃዎችን መሰረት ያደረጉ መሳሪያዎችን ነው። በJBoss EAP ላይ የሚሰራ መተግበሪያ የለህም? ምንም ችግር የለም፣ በመጠቀም ከአሁኑ የመተግበሪያ አገልጋይዎ ወደ JBoss EAP በቀላሉ ሊሸጋገር ይችላል። የቀይ ኮፍያ መተግበሪያ የፍልሰት መሣሪያ ስብስብ. ከዚያ በኋላ የዘመናዊው ኮድ የመጨረሻው እና የሚሰራው ስሪት በማጠራቀሚያው ውስጥ ይገኛል። github.com/mrizzi/jboss-eap-quickstarts/tree/quarkus, በሞጁል ውስጥ ሰላም ልዑል.

ይህንን ጽሑፍ ስንጽፍ ተጠቀምን። የኳርኩስ መመሪያዎች፣ በመሠረቱ የመጀመሪያ ማመልከቻዎን በመፍጠር ላይ እና መገንባት ሀ ቤተኛ ተፈፃሚ.

ኮዱን እንውሰድ

በመጀመሪያ ፣ የማከማቻውን አካባቢያዊ ክሎሎን እንፍጠር JBoss ኢኤፒ ፈጣን ይጀምራል:

$ 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 እንዴት እንደሚሰራ እንይ

በእውነቱ ፣ የዚህ መተግበሪያ ይዘት ከስሙ ግልፅ ነው ፣ ግን ኮዱን በጥብቅ ሳይንሳዊ እናዘምነዋለን። ስለዚህ፣ በመጀመሪያ፣ ይህን መተግበሪያ በዋናው መልክ እንመልከተው።

ሠላም ዓለምን በማሰማራት ላይ

1. ተርሚናል ይክፈቱ እና ወደ JBoss EAP አቃፊ ስር ይሂዱ (ማውረድ ይችላሉ) እዚህ)፣ ማለትም፣ ወደ EAP_HOME አቃፊ።

2. የJBoss EAP አገልጋይን ከነባሪ መገለጫ ጋር አስጀምር፡-

$ EAP_HOME/bin/standalone.sh

ማስታወሻ: በዊንዶውስ ላይ 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 እና ይህን እናያለን:

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሩዝ. 1. JBoss EAP መነሻ ገጽ.

4. በመመሪያው ውስጥ ያሉትን መመሪያዎች ይከተሉ ፈጣን ማስጀመሪያውን ይገንቡ እና ያሰማሩ: helloworldን ዘርጋ እና (ከፕሮጄክት ስር አቃፊው) የሚከተለውን ትዕዛዝ ያሂዱ

$ mvn clean install wildfly:deploy

ይህንን ትእዛዝ በተሳካ ሁኔታ ከፈጸምን በኋላ፣ በምዝግብ ማስታወሻው ውስጥ የሚከተለውን የመሰለ ነገር እናያለን።

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

ስለዚህ በJBoss EAP ላይ የሄሎአለም መተግበሪያን ለመጀመሪያ ጊዜ ማሰማራቱ ከ8 ሰከንድ በላይ ፈጅቷል።

ሠላም ዓለምን በመሞከር ላይ

በመመሪያው መሠረት በጥብቅ እርምጃ ይውሰዱ መተግበሪያውን ይድረሱ, በአሳሹ ውስጥ ይክፈቱ 127.0.0.1: 8080 / helloworld እና ይህንን እናያለን:

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሩዝ. 2. ኦሪጅናል ሄሎ ዓለም ከ JBoss EAP.

ለውጦችን ማድረግ

የግቤት መለኪያውን createHelloMessage(የሕብረቁምፊ ስም) ከአለም ወደ ማርኮ ይለውጡ፡

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

የሚከተለውን ትዕዛዝ እንደገና ያሂዱ:

$ mvn clean install wildfly:deploy

ከዚያ ገጹን በአሳሹ ውስጥ እናድሳለን እና ጽሑፉ እንደተለወጠ እናያለን-

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሩዝ. 3. ሰላም ማርኮ በ JBoss EAP.

የ helloworld ማሰማራቱን ይመልሱ እና JBoss EAPን ይዝጉ

ይህ አማራጭ ነው፣ ግን ስምምነቱን መሰረዝ ከፈለጉ በሚከተለው ትእዛዝ ማድረግ ይችላሉ።

$ mvn clean install wildfly:undeploy

የእርስዎን JBoss EAP ምሳሌ ለመዝጋት በቀላሉ በተርሚናል መስኮት ውስጥ Ctrl+C ይጫኑ።

ሠላም ዓለምን በማሻሻል ላይ

አሁን ዋናውን የሄሎአለም መተግበሪያን እናዘምነው።

አዲስ ቅርንጫፍ ይፍጠሩ

የፈጣን ጅምር ፕሮጀክት ከተጠናቀቀ በኋላ አዲስ የሚሰራ ቅርንጫፍ እንፈጥራለን፡-

$ git checkout -b quarkus 7.2.0.GA

pom.xml ፋይልን በመቀየር ላይ

ማመልከቻውን ከፖም.xml ፋይል መለወጥ እንጀምራለን. ኳርኩስ የኤክስኤምኤል ብሎኮችን እንዲያስገባ ለመፍቀድ በ helloworld አቃፊ ውስጥ የሚከተለውን ትዕዛዝ ያሂዱ፡-

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

ይህን ጽሑፍ በሚጽፉበት ጊዜ, ስሪት 0.23.2 ጥቅም ላይ ውሏል. ኳርኩስ ብዙ ጊዜ አዳዲስ ስሪቶችን ይለቀቃል, የትኛው ስሪት በድረ-ገጹ ላይ የቅርብ ጊዜው እንደሆነ ማወቅ ይችላሉ github.com/quarkusio/quarkus/releases/የቅርብ.

ከላይ ያለው ትዕዛዝ የሚከተሉትን ንጥረ ነገሮች ወደ pom.xml ያስገባል፡-

  • ንብረት ለመጠቀም የኳርኩስ ሥሪትን የሚገልጽ።
  • አግድ ለእያንዳንዱ የኳርኩስ ጥገኝነት ስሪት ላለመጨመር Quarkus BOM (የቁሳቁሶች ደረሰኝ) ለማስገባት።
  • የኳርኩስ-ማቨን-ፕለጊን አፕሊኬሽኑን የማሸግ እና የእድገት ሁነታን የመስጠት ሃላፊነት አለበት።
  • የመተግበሪያ ተፈጻሚዎችን ለመፍጠር የቤተኛ መገለጫ።

በተጨማሪም፣ በፖም.xml ላይ በእጅ የሚከተሉትን ለውጦች እናደርጋለን።

  1. መለያውን በማውጣት ላይ ከእገዳው እና ከመለያው በላይ ያስቀምጡት . ምክንያቱም በሚቀጥለው ደረጃ እገዳውን እናስወግደዋለን , ከዚያ ማስቀመጥ ያስፈልግዎታል .
  2. እገዳን በማስወገድ ላይ ምክንያቱም ከኳርኩስ ጋር ሲሄድ ይህ መተግበሪያ ከJBoss የወላጅ ፖም አያስፈልገውም።
  3. መለያ ጨምር እና በመለያው ስር ያስቀምጡት . የሚፈልጉትን የስሪት ቁጥር መግለጽ ይችላሉ።
  4. መለያውን በማስወገድ ላይ ይህ መተግበሪያ ከአሁን በኋላ WAR ሳይሆን መደበኛ JAR ስለሆነ።
  5. የሚከተሉትን ጥገኞች እናስተካክላለን
    1. ጥገኝነቱን javax.enterprise:cdi-api ወደ io.quarkus:quarkus-arc ቀይር፣ በማስወገድ የቀረበ ነው። (በሰነዶቹ መሠረት) ይህ የኳርኩስ ማራዘሚያ የCDI ጥገኞች መርፌ ይሰጣል።
    2. ጥገኝነት org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec ወደ io.quarkus:quarkus-undertow ቀይር፣ በማስወገድ የቀረበ ነው። ምክንያቱም (በሰነዶቹ መሠረት) ይህ የኳርኩስ ቅጥያ ለሰርቨቶች ድጋፍ ይሰጣል።
    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:የፈጠረ ትዕዛዝ የፖም.xml ፋይልን ከመቀየር በተጨማሪ በፕሮጀክቱ ላይ በርካታ አካላትን ማለትም የሚከተሉትን ፋይሎች እና ማህደሮች እንደሚጨምር ልብ ይበሉ።

  • የ mvnw እና mvnw.cmd ፋይል እና የ.mvn አቃፊ፡ Maven Wrapper ያንን ስሪት ሳይጭኑ የMaven ፕሮጄክቶችን እንዲያሄዱ ይፈቅድልዎታል።
  • Docker አቃፊ (በ src/ዋና/ ማውጫ)፡ ይህ ለቤተኛ እና ለ jvm ሁነታዎች (ከ.dockerignore ፋይል ጋር) ምሳሌ Dockerfiles ይዟል።
  • የመርጃዎች አቃፊ (በ src/ዋና/ ማውጫ ውስጥ)፡ ይህ ባዶ የመተግበሪያ.ፕሮፐርቲቲ ፋይል እና የ Quarkus index.html መነሻ ገጽን ይዟል (ለበለጠ ዝርዝር የዘመናዊውን helloworld Run የሚለውን ይመልከቱ)።

helloworldን አስጀምር
አፕሊኬሽኑን ለመፈተሽ ኳርኩስን በእድገት ሞድ የሚያስነሳውን 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

ስለዚህ, አይሰራም ... ለምን?

ያልረካው ResolutionException የHelloWorldServlet ክፍል (የጃቫ አባል፡ org.jboss.as.quickstarts.helloworld.HelloWorldServlet#HelloService) አባል የሆነውን የHeloService ክፍልን ይጠቁማል። ችግሩ HelloWorldServlet ሄሎዎልድ ሰርቪስ የተከተተ ምሳሌ ያስፈልገዋል፣ እና ሊገኝ አይችልም (ምንም እንኳን ሁለቱም እነዚህ ክፍሎች በአንድ ጥቅል ውስጥ ቢሆኑም)።

ወደ መመለስ ጊዜው ነው ሰነድ እና በኳርኩስ ውስጥ እንዴት እንደሚሰራ ያንብቡ መርፌ, እና ስለዚህ አውዶች እና ጥገኛነት መርፌ (ሲዲአይ) ስለዚህ የአውድ እና የጥገኝነት መርፌ መመሪያን እና በክፍሉ ውስጥ ይክፈቱ የባቄላ ግኝት “ባቄላ የሚገልጽ ማብራሪያ የሌለው የባቄላ ክፍል አይፈለግም” እናነባለን።

የሄሎ ሰርቪስ ክፍልን እንይ - በእውነቱ እንደዚህ አይነት ማብራሪያ የለውም። ስለዚህ ቋርኩስ ባቄላውን ፈልጎ እንዲያገኝ መታከል አለበት። እና ይሄ ሀገር አልባ ነገር ስለሆነ በቀላሉ @ApplicationScoped ማብራሪያን እንደሚከተለው ማከል እንችላለን፡-

@ApplicationScoped
public class HelloService {

ማስታወሻ: እዚህ የዕድገት አካባቢው የሚፈለገውን ፓኬጅ እንዲያክሉ ሊጠይቅዎት ይችላል (ከዚህ በታች ያለውን መስመር ይመልከቱ) እና ይህንን እራስዎ እንደዚሁ ማድረግ አለብዎት።

import javax.enterprise.context.ApplicationScoped;

ምንጩ ባቄላ ጨርሶ በማይገለጽበት ጊዜ በጉዳዩ ውስጥ የትኛው ወሰን ጥቅም ላይ መዋል እንዳለበት ጥርጣሬ ካደረብዎት ሰነዶቹን ያንብቡ JSR 365፡ አውዶች እና ጥገኛነት ለጃቫ 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 (ነባሪው የኳርኩስ መነሻ ገጽ) እና ይህንን እናያለን፡

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሩዝ. 4. የኳርኩስ ዴቭ መነሻ ገጽ።

የዚህ መተግበሪያ የWebServlet ማብራሪያ የሚከተለውን አውድ ፍቺ ይዟል፡-

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

ስለዚህ, ወደ አሳሹ ውስጥ እንሄዳለን 0.0.0.08080/HelloWorld እና የሚከተለውን እናያለን፡

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከJBoss EAP Quickstart

ሩዝ. 5፡ የኳርኩስ ዴቭ ገጽ ለሄሎ አለም መተግበሪያ።

ደህና, ሁሉም ነገር ይሰራል.

አሁን በኮዱ ላይ ለውጦችን እናድርግ። የ ./mvnw compile quarkus:dev ትዕዛዝ አሁንም እየሰራ መሆኑን እና እኛ ለማቆም ምንም አላማ የለንም። አሁን ተመሳሳይ - በጣም ቀላል - በኮዱ ላይ ለውጦችን ለመተግበር እንሞክር እና ኳርኩስ ለገንቢው እንዴት ህይወትን ቀላል እንደሚያደርግ ይመልከቱ።

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

ከዚህ በታች ባለው ቅጽበታዊ ገጽ እይታ ላይ እንደሚታየው ፋይሉን ያስቀምጡ እና ሄሎ ማርኮን ለማየት ድረ-ገጹን ያድሱ።

ኳርኩስ፡ የሄሎአለምን ምሳሌ በመጠቀም የመተግበሪያን ማዘመን ከ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

የገጹ እድሳት በምንጭ ኮድ ላይ የተደረጉ ለውጦችን ፈልስፏል፣ እና ኳርኩስ በራስ-ሰር የማቆም ጅምር አከናውኗል። እና ይህ ሁሉ በ0.371 ሰከንድ ብቻ ተጠናቀቀ (እዚህ ጋር ነው፣ ያ “እጅግ በጣም ፈጣን ሱባቶሚክ ጃቫ”)።

helloworld ወደ JAR ጥቅል መገንባት
አሁን ኮዱ እንደፈለገው ይሰራል፣ በሚከተለው ትእዛዝ እናሽገው፡

$ ./mvnw clean package

ይህ ትእዛዝ በ / ዒላማ ማህደር ውስጥ ሁለት JAR ፋይሎችን ይፈጥራል፡ የ helloworld-.jar ፋይል፣ እሱም በማቨን ቡድን ከፕሮጀክቱ ክፍሎች እና ግብዓቶች ጋር የተገጣጠመ መደበኛ ቅርስ ነው። እና helloworld-runner.jar ፋይል፣ እሱም ተፈጻሚ JAR ነው።

እባክዎ ይህ uber-jar እንዳልሆነ ልብ ይበሉ፣ ምክንያቱም ሁሉም ጥገኞች በቀላሉ የሚገለበጡት ወደ / target/lib አቃፊ (ወደ JAR ፋይል ያልታሸገ) ነው። ስለዚህ፣ ይህንን JAR ከሌላ ፎልደር ወይም ከሌላ አስተናጋጅ ለማሄድ፣ በ JAR ጥቅል ውስጥ ባለው MANIFEST.MF ፋይል ውስጥ ያለው የክፍል ዱካ አካል ስላለው ሁለቱንም የJAR ፋይል እራሱን እና /lib አቃፊውን መቅዳት ያስፈልግዎታል። ከሊብ አቃፊዎች የተገኘ ግልጽ የሆነ የJARs ዝርዝር
የኡበር-ጃር አፕሊኬሽኖችን እንዴት መፍጠር እንደሚችሉ ለማወቅ እባክዎን አጋዥ ስልጠናውን ይመልከቱ የኡበር-ጃር ፈጠራ.

በJAR ውስጥ የታሸገ helloworldን አስጀምር

አሁን መደበኛውን የጃቫ ትዕዛዝ በመጠቀም የእኛን 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 የኳርኩስ ጥገኞችን በመጠቀም ራሱን የቻለ የጃቫ መተግበሪያ ይሰራል። ግን የበለጠ መሄድ እና ወደ ቤተኛ ተፈጻሚ ፋይል መቀየር ይችላሉ።

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)

በሌሎች ስርዓተ ክወናዎች ላይ ተጨማሪ መረጃ እና የመጫኛ መመሪያዎችን ለማግኘት መመሪያውን ይመልከቱ ተወላጅ ፈጻሚ - ቅድመ-ሁኔታዎች መገንባት.

ሄሎአለምን ወደ ተወላጅ ተፈጻሚ ፋይል መገንባት
መመሪያውን በማንበብ ተወላጅ ፈጻሚ መገንባት—ተወላጅ ተፈፃሚ ማፍራት።አሁን ለመተግበሪያችን የማስነሻ ሰዓቱን እና የዲስክ መጠኑን ለመቀነስ ቤተኛ ተፈጻሚ ፋይል እንፍጠር። ተፈፃሚው ፋይሉ JVMን (ወይም ይልቁንም የተቆረጠ እትም ፣ መተግበሪያውን ለማስኬድ የሚያስፈልጉትን ብቻ የያዘ) እና የእኛን መተግበሪያ ጨምሮ ለማሄድ አስፈላጊ የሆኑ ነገሮች ሁሉ ይኖረዋል።

ቤተኛ የሚፈጸም ፋይል ለመፍጠር፣ ቤተኛ Maven መገለጫን ማንቃት አለብህ፡-

$ ./mvnw package -Pnative

ግንባታችን አንድ ደቂቃ ከ10 ሰከንድ ፈጅቷል፣ እና የመጨረሻው ሄሎአለም-ሯጭ ረ ፋይል የተፈጠረው በ/ታርጌት አቃፊ ውስጥ ነው።

ቤተኛ helloworld executable አሂድ

በቀደመው ደረጃ፣ ተፈጻሚ የሆነውን ፋይል/ታርጌት/ሄሎአለም-ሯጭ ተቀብለናል። አሁን እናስኬደው፡-

$ ./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 እና ሁሉም ነገር በትክክል እንደሚሰራ ያረጋግጡ።

ይቀጥላል!

በዚህ ጽሑፍ ውስጥ የተብራሩት የኳርኩስ አቅምን በመጠቀም የጃቫ አፕሊኬሽኖችን የማዘመን ዘዴ (ቀላል ምሳሌ ቢጠቀሙም) በእውነተኛ ህይወት ውስጥ በንቃት ጥቅም ላይ መዋል አለበት ብለን እናምናለን። ይህንን ሲያደርጉ ብዙ ችግሮች ሊያጋጥሙዎት ይችላሉ, በሚቀጥለው ጽሁፍ ላይ በከፊል እንነጋገራለን, የአፈፃፀም ማሻሻያዎችን ለመገምገም የማህደረ ትውስታ ፍጆታን እንዴት እንደሚለካ እንነጋገራለን, የአጠቃላይ የመተግበሪያው ዘመናዊ አሰራር ሂደት አስፈላጊ አካል ነው.

ምንጭ: hab.com

አስተያየት ያክሉ