ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π² ΡΠΎΠ·ΠΈ Π±Π»ΠΎΠ³, Π΅ΡΠΎ ΡΠ΅ΡΠ²ΡΡΡΠ°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΎΡ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ°ΡΠ° 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/
ΠΠ΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ helloworld
ΠΡΡΡΠ½ΠΎΡΡ ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΡΡΠ½Π° ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ, Π½ΠΎ Π½ΠΈΠ΅ ΡΠ΅ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΡΡΠΎΠ³ΠΎ Π½Π°ΡΡΠ½ΠΎ. ΠΡΠΎ Π·Π°ΡΠΎ, Π½Π΅ΠΊΠ° ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ ΠΌΡ Π²ΠΈΠ΄.
ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° 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
Π ΡΠ°ΠΊΠ°, ΠΏΡΡΠ²ΠΎΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ helloworld Π½Π° JBoss EAP ΠΎΡΠ½Π΅ ΠΌΠ°Π»ΠΊΠΎ Π½Π°Π΄ 8 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° helloworld
ΠΠ΅ΠΉΡΡΠ²Π°ΠΉΡΠ΅ ΡΡΡΠΈΠΊΡΠ½ΠΎ ΡΠΏΠΎΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅
ΠΡΠΈΠ·. 2. ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π΅Π½ Hello World ΠΎΡ JBoss EAP.
ΠΡΠ°Π²Π΅Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ
ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ createHelloMessage(ΠΈΠΌΠ΅ Π½Π° Π½ΠΈΠ·) ΠΎΡ World Π½Π° Marco:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ mvn clean install wildfly:deploy
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠΏΡΠ΅ΡΠ½ΡΠ²Π°ΠΌΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π² Π±ΡΠ°ΡΠ·ΡΡΠ° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»:
ΠΡΠΈΠ·. 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 ΡΠ΅ΡΡΠΎ ΠΏΡΡΠΊΠ° Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΡ Π²Π΅ΡΡΠΈΡ Π΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° Π½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ°
ΠΠΎΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π²ΠΌΡΠΊΠ½Π΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π² pom.xml:
- ΠΠΌΠΎΡ , ΠΊΠΎΠΉΡΠΎ ΡΠΊΠ°Π·Π²Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Quarkus, ΠΊΠΎΡΡΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
- ΠΠ»ΠΎΠΊΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°ΡΠ΅ Quarkus BOM (ΡΠΏΠΈΡΡΠΊ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅), Π·Π° Π΄Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²Π΅ΡΡΠΈΡ Π·Π° Π²ΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π½Π° Quarkus.
- ΠΠ»ΡΠ³ΠΈΠ½ΡΡ quarkus-maven Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.
- Π ΠΎΠ΄Π½ΠΈΡΡ ΠΏΡΠΎΡΠΈΠ» Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² pom.xml:
- ΠΠ·Π΄ΡΡΠΏΠ²Π°Π½Π΅ Π½Π° Π΅ΡΠΈΠΊΠ΅ΡΠ° ΠΎΡ Π±Π»ΠΎΠΊΠ° ΠΈ Π³ΠΎ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π½Π°Π΄ Π΅ΡΠΈΠΊΠ΅ΡΠ° . Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ° , ΡΠΎΠ³Π°Π²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ .
- ΠΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊ , Π·Π°ΡΠΎΡΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ Quarkus, ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ pom ΠΎΡ 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, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ΄Π²Π° ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡ ΠΌΠ΅.
ΠΠ΅ΡΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π° 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/): Π’ΠΎΠ²Π° ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Docker Π·Π° ΡΠ΅ΠΆΠΈΠΌΠΈ native ΠΈ 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 ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈ Π΄Π²Π°ΡΠ° ΠΊΠ»Π°ΡΠ° ΡΠ° Π² Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ).
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ»Π°ΡΠ° HelloService - ΡΠΎΠΉ Π½Π°ΠΈΡΡΠΈΠ½Π° Π½ΡΠΌΠ° ΡΠ°ΠΊΠ°Π²Π° Π°Π½ΠΎΡΠ°ΡΠΈΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Quarkus Π΄Π° ΡΡΡΡΠΈ ΠΈ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ Π·ΡΡΠ½ΠΎΡΠΎ. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΎΠ±Π΅ΠΊΡ Π±Π΅Π· ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°Π½ΠΎΡΠ°ΡΠΈΡΡΠ° @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]
Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΎ Π²ΡΡΠ²ΠΈ Π±Π΅Π· Π³ΡΠ΅ΡΠΊΠΈ.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ helloworld
ΠΠ°ΠΊΡΠΎ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°
ΠΡΠΈΠ·. 4. ΠΠ°ΡΠ°Π»Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π° Quarkus dev.
ΠΠ½ΠΎΡΠ°ΡΠΈΡΡΠ° Π½Π° WebServlet Π·Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
@WebServlet("/HelloWorld")
public class HelloWorldServlet extends HttpServlet {
ΠΠ°ΡΠΎΠ²Π° ΠΎΡΠΈΠ²Π°ΠΌΠ΅ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°, Π·Π° Π΄Π°
ΠΡΠΈΠ·. 5: Π‘ΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Quarkus dev Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Hello World.
Π, Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ.
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ./mvnw compile quarkus:dev Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΈ Π½ΠΈΠ΅ Π½ΡΠΌΠ°ΠΌΠ΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π° Ρ ΡΠΏΠΈΡΠ°ΠΌΠ΅. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΡΡΡΠΈΡΠ΅ - ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ - ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Quarkus ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ°:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
ΠΠ°ΠΏΠ°Π·Π΅ΡΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠΏΡΠ΅ΡΠ½Π΅ΡΠ΅ ΡΠ΅Π± ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Hello Marco, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π΅ΠΊΡΠ°Π½Π½Π°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
ΠΡΠΈΠ·. 6. Π‘ΡΡΠ°Π½ΠΈΡΠ° Hello Marco Π² 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 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ (Π΅ΡΠΎ Ρ βΡΠ»ΡΡΠ°-Π±ΡΡΠ·Π°ΡΠ° ΡΡΠ±Π°ΡΠΎΠΌΠ½Π° Javaβ).
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° 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 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠ»Ρ, Π²ΠΈΠΆΡΠ΅ ΡΡΠΎΠΊΠ°
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ 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]
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° Π²Π°ΡΠΈΡ Π±ΡΠ°ΡΠ·ΡΡ Π½Π° Π°Π΄ΡΠ΅Ρ
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° helloworld Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ»
Π’Π°ΠΊΠ° ΡΠ΅ Π½Π°ΡΠΈΡΡ helloworld ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π° Quarkus. ΠΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π²ΡΡΠ½Π΅ΡΠ΅ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ».
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° GraalVM
ΠΠ° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ, Π·Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ:
1. ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ GraalVM 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 Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ»
Π§Π΅ΡΠ΅Π½Π΅ Π½Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ
ΠΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΡΡΡΠ±Π²Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ» Π½Π° 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]
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄Π²Π°!
ΠΡΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ Π·Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Quarkus, ΠΎΠ±ΡΡΠ΄Π΅Π½ Π² ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ (ΠΌΠ°ΠΊΠ°Ρ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΡΡ ΠΏΡΠΈΠΌΠ΅Ρ), ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎ Π² ΡΠ΅Π°Π»Π½ΠΈΡ ΠΆΠΈΠ²ΠΎΡ. ΠΡΠΈ ΡΠΎΠ²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ½Π΅ΡΠ΅ ΡΠ΅Π΄ΠΈΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, Π·Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π²Π°ΠΆΠ½Π° ΡΠ°ΡΡ ΠΎΡ ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com