Quarkus: ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Helloworld ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ JBoss EAP Quickstart

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС Π½Π° овој Π±Π»ΠΎΠ³, Π΅Π²Π΅ Π³ΠΎ Ρ‡Π΅Ρ‚Π²Ρ€Ρ‚ΠΈΠΎΡ‚ пост ΠΎΠ΄ ΡΠ΅Ρ€ΠΈΡ˜Π°Ρ‚Π° ΠšΠ²Π°Ρ€ΠΊΡƒΡ!

Quarkus: ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Helloworld ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ JBoss EAP Quickstart

ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π΅Π½ пост бСшС Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Quarkus Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° MicroProfile ΠΈ Spring. Π”Π° Π²Π΅ потсСтимС Π΄Π΅ΠΊΠ° ΠšΠ²Π°Ρ€ΠΊΡƒΡ Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½ ΠΊΠ°ΠΊΠΎ β€žΡƒΠ»Ρ‚Ρ€Π°-Π±Ρ€Π·Π° субатомска Javaβ€œ, ΠΏΠΎΠ·Π½Π°Ρ‚ ΠΊΠ°ΠΊΠΎ β€žΠˆΠ°Π²Π° стСк ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ ΠΊΠΎΠ½ Kubernetes, ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ Π·Π° 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. По ΡˆΡ‚ΠΎ Ρ„ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ ќС Π±ΠΈΠ΄Π΅ достапна Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ 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 ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ΅Ρ‚Π΅ (ΠΎΠ΄ root Ρ„ΠΎΠ»Π΄Π΅Ρ€ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚) слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°:

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

Π‘ΠΎΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΠ²Π° Π³Ρ€Π°Π½ΠΊΠ°

НиС создавамС Π½ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° Π³Ρ€Π°Π½ΠΊΠ° ΠΏΠΎ Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π·Π° Π±Ρ€Π· ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ:

$ 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 Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΏΠ°ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜.
  • ΠŸΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, Π½ΠΈΠ΅ Ρ€Π°Ρ‡Π½ΠΎ Π³ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ слСднитС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ 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-underdow, ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ , бидСјќи (спорСд Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅) ΠΎΠ²Π°Π° Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Π° Π½Π° 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).
  • Папка Resources (Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ 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, ΠΈ Ρ‚Π°Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС најдС (ΠΈΠ°ΠΊΠΎ ΠΈ Π΄Π²Π΅Ρ‚Π΅ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ класи сС Π²ΠΎ истиот ΠΏΠ°ΠΊΠ΅Ρ‚).

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° сС Π²Ρ€Π°Ρ‚ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π²ΠΎ ΠšΠ²Π°Ρ€ΠΊΡƒΡ Π˜Π½Ρ˜Π΅ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅, Π° со Ρ‚ΠΎΠ° ΠΈ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΠΈ ΠΈ ΠΈΠ½Ρ˜Π΅ΠΊΡ†ΠΈΡ˜Π° Π½Π° зависност (CDI). Π—Π°Ρ‚ΠΎΠ°, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ Π²ΠΎΠ΄ΠΈΡ‡ΠΎΡ‚ Contexts and Dependency Injection ΠΈ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π‘ΠΈΠ½ ДискавСри Ρ‡ΠΈΡ‚Π°ΠΌΠ΅: β€žΠšΠ»Π°ΡΠ°Ρ‚Π° Π·Π° Π³Ρ€Π°Π² ΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠ° ΡˆΡ‚ΠΎ ја Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π·Ρ€Π½Π°Ρ‚Π° Π½Π΅ сС ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°β€œ.

АјдС Π΄Π° ја ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ класата HelloService - Ρ‚Π°Π° навистина Π½Π΅ΠΌΠ° Ρ‚Π°ΠΊΠ²Π° ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠ°. Π—Π°Ρ‚ΠΎΠ°, ΠΌΠΎΡ€Π° Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Quarkus Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π° ΠΈ Π΄Π° Π³ΠΎ најдС Π³Ρ€Π°Π²ΠΎΡ‚. И бидСјќи ΠΎΠ²Π° Π΅ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ Π±Π΅Π· Π΄Ρ€ΠΆΠ°Π²Ρ˜Π°Π½ΡΡ‚Π²ΠΎ, лСсно ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΡ€ΠΈΠ±Π΅Π»Π΅ΡˆΠΊΠ°Ρ‚Π° @ApplicationScoped Π²Π°ΠΊΠ°:

@ApplicationScoped
public class HelloService {

Π—Π°Π±Π΅Π»Π΅ΡˆΠΊΠ°: ΠΎΠ²Π΄Π΅ Ρ€Π°Π·Π²ΠΎΡ˜Π½Π°Ρ‚Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ±Π°Ρ€Π° ΠΎΠ΄ вас Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ (Π²ΠΈΠ΄Π΅Ρ‚Π΅ ја Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ), ΠΈ ќС ΠΌΠΎΡ€Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ° Ρ€Π°Ρ‡Π½ΠΎ, Π²Π°ΠΊΠ°:

import javax.enterprise.context.ApplicationScoped;

Ако сС Π΄Π²ΠΎΡƒΠΌΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ° кој опсСг Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС користи Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ ΠΊΠΎΠ³Π° Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ Π·Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ Π³Ρ€Π°Π², ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ја Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° JSR 365: ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΠΈ ΠΈ ΠΈΠ½Ρ˜Π΅ΠΊΡ†ΠΈΡ˜Π° Π½Π° зависност Π·Π° Java 2.0 - Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π΅Π½ опсСг.

Π‘Π΅Π³Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° ја стартувамС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ./mvnw compile quarcus: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]

Π‘Π΅Π³Π° сè ΠΎΠ΄ΠΈ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π›Π°Π½ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ helloworld
Како ΡˆΡ‚ΠΎ Π΅ напишано Π²ΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ Π²ΠΎ прСлистувачот 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: Π‘Ρ‚Ρ€Π°Π½Π°Ρ‚Π° Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Quarcus Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Hello World.

Па, сè Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°.

Π‘Π΅Π³Π° ајдС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚. Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ./mvnw compile quarcus: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 автоматски ΠΈΠ·Π²Ρ€ΡˆΠΈ постапка Π·Π° ΡΡ‚ΠΎΠΏΠΈΡ€Π°ΡšΠ΅. И сСто ΠΎΠ²Π° бСшС Π·Π°Π²Ρ€ΡˆΠ΅Π½ΠΎ Π·Π° само 0.371 сСкунди (Π΅Π²Π΅ Π³ΠΎ, ΠΎΠ½Π°Π° β€žΡƒΠ»Ρ‚Ρ€Π°Π±Ρ€Π·Π° субатомска ΠˆΠ°Π²Π°β€œ).

Π“Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° helloworld Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ JAR
Π‘Π΅Π³Π° ΠΊΠΎΠ³Π° ΠΊΠΎΠ΄ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π°, ајдС Π΄Π° Π³ΠΎ спакувамС со слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ ./mvnw clean package

Оваа ΠΊΠΎΠΌΠ°Π½Π΄Π° создава Π΄Π²Π΅ JAR-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° /target: Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° helloworld-.jar, која Π΅ стандардСн Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ составСн ΠΎΠ΄ Ρ‚ΠΈΠΌΠΎΡ‚ Π½Π° Maven Π·Π°Π΅Π΄Π½ΠΎ со класитС ΠΈ рСсурситС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚. И Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° helloworld-runner.jar, која Π΅ ΠΈΠ·Π²Ρ€ΡˆΠ½Π° JAR.

Π’Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°Ρ˜Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π½Π΅ Π΅ uber-jar, бидСјќи ситС зависности Сдноставно сС ΠΊΠΎΠΏΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° /target/lib (Π½Π΅ Π΅ спакувана Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° JAR). Π—Π°Ρ‚ΠΎΠ°, Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ овој JAR ΠΎΠ΄ Π΄Ρ€ΡƒΠ³Π° ΠΏΠ°ΠΏΠΊΠ° ΠΈΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ хост, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΈ самата JAR-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° /lib Ρ‚Π°ΠΌΡƒ, имајќи ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Class-Path Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° MANIFEST.MF Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ JAR содрТи СксплицитСн список Π½Π° 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)

Π—Π° повСќС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ инструкции Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ систСми, Π²ΠΈΠ΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΏΡ€ΠΈΡ€Π°Ρ‡Π½ΠΈΠΊΠΎΡ‚ Building a Native Executable β€” ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈ.

Π“Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° helloworld Π²ΠΎ домашна ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°
Π§ΠΈΡ‚Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΈΡ€Π°Ρ‡Π½ΠΈΠΊΠΎΡ‚ Building a Native Executable-ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½ ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°: β€žΠ‘Π΅Π³Π°, ајдС Π΄Π° создадСмС ΠΈΠ·Π²ΠΎΡ€Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° дискот. Π˜Π·Π²Ρ€ΡˆΠ½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ќС ΠΈΠΌΠ° сè ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΎ ΠΈ 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 ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ сè Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π°.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π°!

Π‘ΠΌΠ΅Ρ‚Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ Π·Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Java Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° моТноститС Π½Π° Quarkus Π·Π° кој сС дискутира Π²ΠΎ овој пост (ΠΈΠ°ΠΊΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ СдноставСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Ρ‚Ρ€Π΅Π±Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° сС користи Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΈΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚. ΠŸΡ€ΠΈΡ‚ΠΎΠ°, Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ ќС Π½Π°ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈ Π΄Π΅Π»ΡƒΠΌΠ½ΠΎ ќС Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²ΠΎ слСдниот пост, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° ја ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌΠ΅ ΠΏΠΎΡ‚Ρ€ΠΎΡˆΡƒΠ²Π°Ρ‡ΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° Π·Π° Π΄Π° Π³ΠΈ ΠΎΡ†Π΅Π½ΠΈΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ°Ρ‚Π° Π²ΠΎ пСрформанситС, Π²Π°ΠΆΠ΅Π½ Π΄Π΅Π» ΠΎΠ΄ Ρ†Π΅Π»ΠΈΠΎΡ‚ процСс Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€