ืืขืื ืึทืืขืืขื ืืืืฃ ืืขื ืืืึธื, ืืึธ ืก ืืขืจ ืคืขืจื ืคึผืึธืกืื ืืื ืื 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/
ืืึธืืืจ ืืขื ืืื ืืขืจ ืึธืจืืืื ืขื ืืขืืืึธืืืึธืจืื ืึทืจืืขื
ืึทืงืืืึทืืื, ืื ืขืกืึทื ืก ืคืื ืืขื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืงืืึธืจ ืคึฟืื ืืขื ื ืึธืืขื, ืึธืืขืจ ืืืจ ืืืขืื ืคืึทืจืืืึทื ืืืงื ืืืื ืงืึธื ืฉืืจืขื ื ืกืืืึทื ืืืคืืงืื. ืืขืจืืืขืจ, ืขืจืฉืืขืจ, ืืึธืื ืก ืงืืง ืืื ืืขื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืึทื ืึธืจืืืื ืขื ืคืึธืจืขื.
ืืืคึผืืืืื ื ืืขืืืึธืืืึธืจืื
1. ืขืคึฟืขื ืขื ืึท ืืืึธืงืืึทื ืืื ืืืื ืฆื ืื ืืืึธืจืฆื ืคืื ืื JBoss EAP ืืขืงืข (ืืืจ ืงืขื ืขื ืืจืืคืงืืคืืข ืขืก
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. ืขืคึฟืขื ืขื ืืื ืึท ืืืขืืขืจืขืจ
ืจืืืก. 1. JBoss EAP ืืึธืืขืคึผืึทืืข.
4. ืืื ืื ืื ืกืืจืึทืงืฉืึทื ื ืืื ืื ืืึทื ืืึทื
$ mvn clean install wildfly:deploy
ื ืึธื ืืฆืืื ืขืงืกืึทืงืืืืื ื ืืขื ืืึทืคึฟืขื, ืืืจ ืืืขืื ืืขื ืขืคึผืขืก ืืื ืื ืคืืืืขื ืืข ืืื ืื ืงืืึธืฅ:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.224 s
ืึทืืื, ืืขืจ ืขืจืฉืืขืจ ืืืคึผืืืืืึทื ื ืคืื ืื ืืขืืืึธืืืึธืจืื ืึทืคึผืืึทืงืืืฉืึทื ืืืืฃ JBoss EAP ืืขื ืืืขื ื ืึธืจ ืืืืขืจ 8 ืกืขืงืื ืืขืก.
ืืขืกืืื ื ืืขืืืึธืืืึธืจืื
ืึทืงืืื ื ืฉืืจืขื ื ืืืื ืฆื ืื ืกืืจืึทืงืฉืึทื ื
ืจืืืก. 2. ืึธืจืืืื ืขื ืืขืื ืืืขืื ืคึฟืื JBoss EAP.
ืืืื ืขื ืืขืจืื ืืขื
ืืืืฉื ืื ืึทืจืืึทื ืฉืจืืึทื ืคึผืึทืจืึทืืขืืขืจ createHelloMessage (ืฉืืจืืงื ื ืึธืืขื) ืคืื ืืืขืื ืฆื ืืึทืจืงืึธ:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
ืืืืคื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื ืืืืืขืจ:
$ mvn clean install wildfly:deploy
ืืขืจื ืึธื ืืืจ ืืขืจืคืจืืฉื ืืขื ืืืึทื ืืื ืืขื ืืืขืืขืจืขืจ ืืื ืืขื ืึทื ืืขืจ ืืขืงืกื ืืื ืคืืจืขื ืืขืจื:
ืจืืืก. 3. ืืขืื ืืึทืจืงืึธ ืืื JBoss EAP.
ืฆืืจืืงืงืจืืื ืื ืืขืืืึธืืืึธืจืื ืืืคึผืืืืืึทื ื ืืื ืคืึทืจืืึทืื JBoss EAP
ืืึธืก ืืื ืึทืคึผืฉืึทื ืึทื, ืึธืืขืจ ืืืื ืืืจ ืืืืื ืฆื ืืึธืื ืืึทืื ืื ืืืคึผืืืืืึทื ื, ืืืจ ืงืขื ืขื ืืึธื ืืึธืก ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ mvn clean install wildfly:undeploy
ืฆื ืคืึทืจืืึทืื ืืืื JBoss EAP ืืืึทืฉืคึผืื, ืืจืืงื ืงืืจื + C ืืื ืื ืืืึธืงืืึทื ืคึฟืขื ืฆืืขืจ.
ืึทืคึผืืจืืืืื ื ืืขืืืึธืืืึธืจืื
ืืืฆื ืืึธืื ืืื ืื ืคืึทืจืืืึทื ืืืงื ืื ืึธืจืืืื ืขื ืืขืืืึธืืืึธืจืื ืึทืคึผืืึทืงืืืฉืึทื.
ืฉืึทืคึฟื ืึท ื ืืึทืข ืฆืืืืึทื
ืืืจ ืืึทืื ืึท ื ืืึทืข ืืจืืขืื ืฆืืืืึทื ื ืึธื ืื ืงืืืืงืงืกืืึทืจื ืคึผืจืืืขืงื ืืื ืืขืขื ืืืงื:
$ git checkout -b quarkus 7.2.0.GA
ืืฉืึทื ืืื ื ืื ืคึผืึธื.ืงืกืื ืืขืงืข
ืืืจ ืืืขืื ืึธื ืืืืื ืืฉืึทื ืืื ื ืื ืึทืคึผืืึทืงืืืฉืึทื ืคึฟืื ืื pom.xml ืืขืงืข. ืฆื ืืึธืื Quarkus ืฆื ืึทืจืืึทื ืืืืื XML ืืืึทืงืก ืืื ืขืก, ืืืืคื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื ืืื ืื ืืขืืืึธืืืึธืจืื ืืขืงืข:
$ mvn io.quarkus:quarkus-maven-plugin:0.23.2:create
ืืืขื ืฉืจืืืื ืืขื ืึทืจืืืงื, ืืืขืจืกืืข 0.23.2 ืืื ืืขื ืืฆื. Quarkus ืึธืคื ืจืืืืกืื ื ืืึทืข ืืืขืจืกืืขืก, ืืืจ ืงืขื ืขื ืืขืคึฟืื ืขื ืืืืก ืืืึธืก ืืืขืจืกืืข ืืื ืื ืืขืฆืืข ืืืืฃ ืืขื ืืืขืืืืืื
ืืขืจ ืืืืื ืืึทืคึฟืขื ืืืขื ืึทืจืืึทื ืืืืื ืื ืคืืืืขื ืืข ืขืืขืืขื ืื ืืื pom.xml:
- ืคืึทืจืืึธื , ืืืึธืก ืกืคึผืขืฆืืคืืฆืืจื ืื ืืืขืจืกืืข ืคืื โโโโืงืืืึทืจืงืืก ืฆื ื ืืฆื.
- ืคืึทืจืฉืคึผืึทืจื ืฆื ืึทืจืืึทื ืคืืจ Quarkus BOM (ืืื ืคืื ืืึทืืขืจืืึทืืก), ืึทืืื ื ืืฉื ืฆื ืืืืื ืึท ืืืขืจืกืืข ืคึฟืึทืจ ืืขืืขืจ ืงืืืึทืจืงืืก ืืขืคึผืขื ืืขื ืกื.
- ืื quarkus-maven-plugin ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืคึผืึทืงืงืึทืืื ื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืคึผืจืึทืืืืืืื ื ืึทื ืืืืืงืืื ื ืืึธืืข.
- ืืขืจ ืืขืืืืจื ืคึผืจืึธืคืื ืคึฟืึทืจ ืงืจืืืืืื ื ืึทืคึผืืึทืงืืืฉืึทื ืขืงืกืขืงืืืึทืืืขืก.
ืืื ืึทืืืฉืึทื, ืืืจ ืืึทื ืืืึทืื ืืึทืื ืื ืคืืืืขื ืืข ืขื ืืขืจืื ืืขื ืฆื pom.xml:
- ืฆืืขื ืืืืก ืื ืงืืืืื ืคืื ืื ืืืึธืง ืืื ืฉืืขืื ืขืก ืืืืื ืื ืงืืืืื . ืืืืึทื ืืื ืืขืจ ืืืืึทืืขืจ ืฉืจืื ืืืจ ืืืขืื ืืึทืืืึทืืืงื ืื ืืืึธืง , ืืขืืึธืื ืืืจ ืืึทืจืคึฟื ืฆื ืจืึทืืขืืืขื .
- ืจืืืืืืื ื ืึท ืืืึธืง , ืืืืึทื ืืืขื ืคืืืกื ืืืง ืืื Quarkus, ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืขื ื ืื ืืขืจ ืืึทืจืคึฟื ืึท ืคืึธืืขืจ ืคึผืึธื ืคืื JBoss.
- ืืืื ืึท ืงืืืืื ืืื ืฉืืขืื ืขืก ืืื ืืขืจ ืื ืงืืืืื . ืืืจ ืงืขื ืขื ืกืคึผืขืฆืืคืืฆืืจื ืื ืืืขืจืกืืข ื ืืืขืจ ืืืจ ืืืืื.
- ืจืืืืืืื ื ืื ืงืืืืื , ืืื ื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ื ืื ืืขืจ ืึท WAR, ืึธืืขืจ ืึท ืจืขืืืืขืจ 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-undertow, ืจืืืืืืื ื ืฆืืืขืฉืืขืื , ืืืืึทื (ืืืื ืื ืืึธืงืืืขื ืื) ืืขื Quarkus ืคืึทืจืืขื ืืขืจืื ื ืืื ืฉืืืฆื ืคึฟืึทืจ ืกืขืจืืืืขืฅ.
- ืืืจ ืืึทืืืึทืืืงื ืื org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec ืืขืคึผืขื ืืขื ืกื ืืื ื ืขืก ืงืืื ืืื ืื ืืืคึผืขื ืืึทื ืกืื ืืืึธืก ืืืจ ื ืึธืจ ืืขืืืื.
ืื ืืืขืจืกืืข ืคืื โโืื ืคึผืึธื.ืงืกืื ืืขืงืข ืืื ืึทืืข ืื ืขื ืืขืจืื ืืขื ืืื ืืืื ืืืึท
ืืึทืืขืจืงืื ื ืึทื ืื mvn io.quarkus:quarkus-maven-plugin:0.23.2:create ืืึทืคึฟืขืื ืืืืื ื ืืฉื ืืืืื ืขื ืืขืจืื ืืขื ืื ืคึผืึธื.ืงืกืื ืืขืงืข, ืึธืืขืจ ืืืื ืืืกืืฃ ืึท ื ืืืขืจ ืคืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืฆื ืื ืคึผืจืืืขืงื, ื ืืืืื ืื ืคืืืืขื ืืข ืืขืงืขืก ืืื ืคืึธืืืขืจืก:
- ืื mvnw ืืื mvnw.cmd ืืขืงืข ืืื ืื .mvn ืืขืงืข: Maven Wrapper ืึทืืึทืื ืืืจ ืฆื ืืืืคื ืืึทืืืขื ืคึผืจืึทืืืฉืขืงืก ืคืื ืึท ืืขืืขืื Maven ืืืขืจืกืืข ืึธื ืื ืกืืึธืืื ื ืื ืืืขืจืกืืข.
- ืืึธืงืงืขืจ ืืขืงืข (ืืื ืื src/main/ ืืืขืืืืืึทืืขืจ): ืืึธืก ืึผืืื ืืืืฉืคืืื Dockerfiles ืคึฟืึทืจ ืืขืืืืจื ืืื jvm ืืึธืืขืก (ืฆืืืืืขื ืืื ืื .dockerignore ืืขืงืข).
- ืจืขืกืึธืืจืกืขืก ืืขืงืข (ืืื ืื src/main/ ืืืขืืืืืึทืืขืจ): ืืึธืก ืึผืืื ืึท ืืืืืืง ืึทืคึผืืึทืงืืืฉืึทื.ืคึผืจืึธืคึผืขืจืืืขืก ืืขืงืข ืืื ืึท ืืืกืืขืจ Quarkus index.html ืึธื ืืืื ืืืึทื (ืืขื ืืืืคื ืื ืืึทืืขืจื ืืืื ืืขืืืึธืืืึธืจืื ืคึฟืึทืจ ืืขืจ ืืขืืึทืืืก).
ืงืึทืืขืจ ืืขืืืึธืืืึธืจืื
ืฆื ืคึผืจืืืืจื ืื ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ื ืืฆื 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 ืงืืึทืก (ื'ืืื ืืืืืืื: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). ืืขืจ ืคึผืจืึธืืืขื ืืื ืึทื HelloWorldServlet ืืึทืจืฃ ืึทื ืื ืืืฉืขืงืืื ืืืึทืฉืคึผืื ืคืื HelloService, ืืื ืขืก ืงืขื ื ืืฉื ืืืื ืืขืคึฟืื ืขื (ืืึธืืฉ ืืืืืข ืื ืงืืืกื ืืขื ืขื ืืื ืืขืจ ืืขืืืืงืขืจ ืคึผืขืงื).
ืขืก ืก ืฆืืึทื ืฆื ืฆืืจืืงืงืืืขื ืฆื
ืืื ืก ืงืืง ืืื ืื HelloService ืงืืึทืก - ืขืก ืืึทืงืข ืืื ื ืืฉื ืืึธืื ืึทืืึท ืึท ืึทื ืึธืืึทืฆืืข. ืืขืจืืืขืจ ืืึทืจืฃ ืืขื ืขืก ืฆืืืขืื ืึผืื ืงืืืึทืจืงืืก ืืึธื ืืืื ืืื ืืขืคึฟืื ืขื ืื ืืขืื. ืืื ืืื ื ืืึธืก ืืื ืึท ืกืืืืืืึทืก ืืืืคืขืฅ, ืืืจ ืงืขื ืขื ืืืืื ืืืืื ืื @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]
ืืืฆื ืึทืืฅ ืืืื ืึธื ืขืจืจืึธืจืก.
ืืึธื ืืฉืื ื ืื ืืึทืืขืจื ืืืื ืืขืืืึธืืืึธืจืื
ืืื ืืขืฉืจืืื ืืื ืื ืงืืึธืฅ, ืขืคืขื ืขื ืขืก ืืื ืืขื ืืืขืืขืจืขืจ
ืจืืืก. 4. Quarkus dev ืึธื ืืืื ืืืึทื.
ืื WebServlet ืึทื ืึธืืึทืฆืืข ืคึฟืึทืจ ืืขื ืึทืคึผืืึทืงืืืฉืึทื ืึผืืื ืื ืคืืืืขื ืืข ืงืึธื ืืขืงืกื ืืขืคึฟืื ืืฆืืข:
@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {
ืืขืจืืืขืจ, ืืืจ ืืืื ืืื ืืขื ืืืขืืขืจืขืจ ืฆื
ืจืืืก. 5: ืื Quarkus ืืขืื ืืืึทื ืคึฟืึทืจ ืื ืืขืื ืืืขืื ืึทืคึผืืึทืงืืืฉืึทื.
ื ื, ืึทืืฅ ืึทืจืืขื.
ืืืฆื ืืึธืื ืืื ืื ืืึทืื ืขื ืืขืจืื ืืขื ืฆื ืื ืงืึธื. ืืึทืืขืจืงืื ื ืึทื ืื ./mvnw ืงืึทืืคึผืืื quarkus:dev ืืึทืคึฟืขื ืืื ื ืึธื ืคืืืกื ืืืง ืืื ืืืจ ืืึธืื ืงืืื ืืืื ื ืฆื ืืึทืืื ืขืก. ืืืฆื ืืึธืืืจ ืคึผืจืืืืจื ืฆื ืฆืืืืืื ืื ืืขืืืข - ืืืืขืจ ื ืืฉืืืง - ืขื ืืขืจืื ืืขื ืฆื ืื ืงืึธื ืืื ืืื ืืขื ืืื Quarkus ืืืื ืืขืื ืืจืื ืืขืจ ืคึฟืึทืจ ืื ืืขืืืขืืึธืคึผืขืจ:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
ืืื ืื ืืขืงืข ืืื ืืขืจืคืจืืฉื ืื ืืืขื ืืืึทื ืฆื ืืขื ืืขืื ืืึทืจืงืึธ, ืืื ืืขืืืืื ืืื ืื ืกืงืจืขืขื ืฉืึธื ืืื ืื:
ืจืืืก. 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 ืกืขืงืื ืืขืก (ืืึธ ืขืก ืืื ืึทื "ืืื ืืขืจ-ืฉื ืขื ืกืืืึทืืึธืืืง ืืืฉืึทืืืึท").
ืืืืขื ืืขืืืึธืืืึธืจืื ืืื ืึท JAR ืคึผืขืงื
ืืืฆื ืึทื ืืขืจ ืงืึธื ืึทืจืืขื ืืื ืขืก ืืึธื, ืืึธืื ืืื ืื ืคึผืขืงื ืขืก ืืื ืื ืคืืืืขื ืืข ืืึทืคึฟืขื:
$ ./mvnw clean package
ืืขืจ ืืึทืคึฟืขื ืงืจืืืืฅ ืฆืืืื JAR ืืขืงืขืก ืืื ืื /target ืืขืงืข: ืื ืืขืืืึธืืืึธืจืื-.ืืืฉืึทืจ ืืขืงืข, ืืืึธืก ืืื ืึท ื ืึธืจืืึทื ืึทืจืืึทืคืึทืงื ืึทืกืขืืืึทืื ืืืจื ืื ืืึทืืืขื ืืึทื ืฉืึทืคึฟื ืฆืืืึทืืขื ืืื ืื ืงืืืกื ืืื ืจืขืกืืจืกื ืคืื ืื ืคึผืจืืืขืงื. ืืื ืื ืืขืืืึธืืืึธืจืื-runner.jar ืืขืงืข, ืืืึธืก ืืื ืึทื ืขืงืกืขืงืืืึทืืืข JAR.
ืืืืข ืืึธื ืึทื ืืึธืก ืืื ื ืืฉื ืึทื ืืืขืจ-ืกืืื, ืืืืึทื ืึทืืข ืืืคึผืขื ืืึทื ืกืื ืืขื ืขื ืคืฉืื ืงืึทืคึผืื ืืื ืื /target/lib ืืขืงืข (ื ืื ืคึผืึทืงืืืืฉื ืืื ืึท JAR ืืขืงืข). ืืขืจืืืขืจ, ืฆื ืืืืคื ืืขื JAR ืคึฟืื ืื ืื ืืขืจ ืืขืงืข ืึธืืขืจ ืืืืฃ ืื ืื ืืขืจ ืืึทืืขืืึธืก, ืืืจ ืืึทืจืคึฟื ืฆื ื ืึธืืืึทืื ืืืืืข ืื JAR ืืขืงืข ืืื ืืื ืื / lib ืืขืงืข ืืึธืจื, ืืืืึทื ืื Class-Path ืขืืขืืขื ื ืืื ืื MANIFEST.MF ืืขืงืข ืืื ืื JAR ืคึผืขืงื ืึผืืื ืึท ืืงืกืคึผืืืกืึทื ืืืกืืื ื ืคืื JARs ืคึฟืื lib ืคืึธืืืขืจืก
ืฆื ืืขืจื ืขื ืืื ืฆื ืฉืึทืคึฟื uber-jar ืึทืคึผืืึทืงืืืฉืึทื ื, ืืืืข ืึธืคึผืฉืืงื ืฆื ืื ืืืืึธืจืืึทื
ืงืึทืืขืจ ืืขืืืึธืืืึธืจืื ืคึผืึทืงืืืืฉื ืืื JAR
ืืืฆื ืืืจ ืงืขื ืขื ืืืืคื ืืื ืืืขืจ 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]
ื ืึธื ืึทืืข ืืขื ืืื ืืขืืื, ืืืื ืฆื ืืืื ืืืขืืขืจืขืจ ืืืึท
ืงืึทืืคึผืืืืื ื ืืขืืืึธืืืึธืจืื ืืื ืึท ืืขืืืืจื ืขืงืกืขืงืืืึทืืืข ืืขืงืข
ืึทืืื ืืื ืืืขืจ ืืขืืืึธืืืึธืจืื ืืืืคื ืืื ืึท ืกืืึทื ืืึทืืึธื ืข Java ืึทืคึผืืึทืงืืืฉืึทื ื ืืฆื Quarkus ืืืคึผืขื ืืึทื ืกืื. ืึธืืขืจ ืืืจ ืงืขื ืขื ืืืื ืืืืึทืืขืจ ืืื ืืืขื ืื ืขืก ืืื ืึท ืืขืืืืจื ืขืงืกืขืงืืืึทืืืข ืืขืงืข.
ืื ืกืืึธืืื ื GraalVM
ืขืจืฉืืขืจ ืคืื ืึทืืข, ืคึฟืึทืจ ืืขื ืืืจ ืืึทืจืคึฟื ืฆื ืื ืกืืึทืืืจื ืื ื ืืืืืง ืืืฉืืจืื:
1. ืืจืืคืงืืคืืข GraalVM 19.2.0.1 ืคึฟืื
2. ืืงืกืคึผืึทื ื ืื ืืึทืื ืืึธืืืื ืึทืจืงืืืื:
$ tar xvzf graalvm-ce-linux-amd64-19.2.0.1.tar.gz
3. ืืืื ืฆื ืื ืื ืืึท ืืขืงืข.
4. ืืืืคื ืื ืืึทืคึฟืขื ืืื ืื ืฆื ืึธืคึผืืึธืืืจื ืืื ืืืืื ืื ืืขืืืืจื ืืืื:
$ ./bin/gu install native-image
5. ืจืขืืืกืืจืืจื ืื ืืขืงืข ืืืฉืืคื ืืื ืฉืจืื 2 ืฆื ืื GRAALVM_HOME ืกืืืืืืข ืืืึทืืขืืืืืง:
$ export GRAALVM_HOME={untar-folder}/graalvm-ce-19.2.0.1)
ืคึฟืึทืจ ืืขืจ ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืืึทื ืืึธื ืืืจืื ื ืื ืกืืจืึทืงืฉืึทื ื ืืืืฃ ืื ืืขืจืข ืึทืก, ืืขื ืื ืืึทื ืืึทื
ืืืืขื ืืขืืืึธืืืึธืจืื ืืื ืึท ืืขืืืืจื ืขืงืกืขืงืืืึทืืืข ืืขืงืข
ืืืืขื ืขื ืื ืืึทื ืืึทื
ืฆื ืฉืึทืคึฟื ืึท ืืขืืืืจืขื ืขืจ ืขืงืกืขืงืืืึทืืืข ืืขืงืข, ืืืจ ืืึทืจืคึฟื ืฆื ืืขืื ืื ืืขืืืืจื Maven ืคึผืจืึธืคืื:
$ ./mvnw package -Pnative
ืืื ืืืขืจ ืืืืขื ืืขื ืืืขื ืืืื ืืื ืื ืืื 10 ืกืขืงืื ืืขืก, ืืื ืื ืืขืฆื ืืขืืืึธืืืึธืจืื-ืืืืคืขืจ ืค ืืขืงืข ืืื ืืืฉืืคื ืืื ืื / ืฆืื ืืขืงืข.
ืืืืคื ืื ืืขืืืืจืขื ืขืจ ืืขืืืึธืืืึธืจืื ืขืงืกืขืงืืืึทืืืข
ืืื ืื ืคืจืืขืจืืืงืข ืฉืจืื, ืืืจ ืืืงืืืขื ืื ืขืงืกืขืงืืืึทืืืข ืืขืงืข /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]
ืขืคึฟืขื ืขื ืขืก ืืืืืขืจ ืืื ืืขื ืืืขืืขืจืขืจ
ืฆื ืืืื ืคืืจืืืืื!
ืืืจ ืืืืืื ืึทื ืืขืจ ืืืคึฟื ืคืื ืืึทืืขืจื ืืืืื ื ื'ืืื ืึทืคึผืืึทืงืืืฉืึทื ื ื ืืฆื Quarkus ืงืืืคึผืึทืืืืึทืืื ืืืกืงืึทืกื ืืื ืืขื ืคึผืึธืกืื (ืึธืืืืื ื ืืฆื ืึท ืคึผืฉืื ืืืึทืฉืคึผืื) ืืึธื ืืืื ืึทืงืืืืืื ืืขื ืืฆื ืืื ืคืึทืงืืืฉ ืืขืื. ืืื ืืื ืึทืืื, ืืืจ ืืืขื ืืกืชึผืื ืืจืขืคื ืึท ื ืืืขืจ ืคืื ืคึผืจืึธืืืขืืก, ืืืึธืก ืืืจ ืืืขืื ืืืืืืืืื ืึทืืจืขืก ืืื ืืขืจ ืืืืึทืืขืจ ืคึผืึธืกืื, ืืื ืืืจ ืืืขืื ืจืขืื ืืืขืื ืืื ืฆื ืืขืกืื ืืึผืจืื ืงืึทื ืกืึทืืฉืึทื ืฆื ืึทืกืกืขืกืก ืคืึธืจืฉืืขืืื ื ืืืคึผืจืืืืืึทื ืฅ, ืึท ืืืืืืืง ืืืื ืคืื ืื ืืื ืฆืข ืึทืคึผืืึทืงืืืฉืึทื ืืึทืืขืจื ืืืืืืฉืึท ืคึผืจืึธืฆืขืก.
ืืงืืจ: www.habr.com