ΠΡΠΈΠ²Π΅Ρ Π²ΡΠ΅ΠΌ Π² ΡΡΠΎΠΌ Π±Π»ΠΎΠ³Π΅, ΠΈ Ρ Π²Π°ΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΠΏΠΎΡΡ ΠΈΠ· ΡΠ΅ΡΠΈΠΈ ΠΏΡΠΎ 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(String name) c World Π½Π° Marco:
writer.println("<h1>" + helloService.createHelloMessage("Marco") + "</h1>");
ΠΠΏΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ mvn clean install wildfly:deploy
ΠΠ°ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ:
Π ΠΈΡ. 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 ΡΠ°ΡΡΠΎ Π²ΡΡ
ΠΎΠ΄ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΡΠ°Π²ΠΈΡ Π² pom.xml ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
- Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ <quarkus.version>, Π·Π°Π΄Π°ΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π΅ΡΡΠΈΡ Quarkus.
- ΠΠ»ΠΎΠΊ <dependencyManagement> Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Quarkus BOM (bill of materials), ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Quarkus.
- ΠΠ»Π°Π³ΠΈΠ½ quarkus-maven-plugin, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ development mode.
- ΠΡΠΎΡΠΈΠ»Ρ native Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² pom.xml ΠΌΡ Π²ΡΡΡΠ½ΡΡ Π²Π½ΠΎΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
- ΠΡΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π³ <groupId> ΠΈΠ· Π±Π»ΠΎΠΊΠ° <parent> ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π²ΡΡΠ΅ ΡΠ΅Π³Π° <artifactId>. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ ΠΌΡ ΡΠ΄Π°Π»ΠΈΠΌ Π±Π»ΠΎΠΊ <parent>, ΡΠΎ Π½Π°Π΄ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ <groupId>.
- Π£Π΄Π°Π»ΡΠ΅ΠΌ Π±Π»ΠΎΠΊ <parent>, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Quarkus ΡΡΠΎΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ pom ΠΎΡ JBoss.
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅Π³ <version> ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΡΠ΅Π³ΠΎΠΌ <artifactId>. ΠΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ Ρ ΠΎΡΠΈΡΠ΅.
- Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΠ΅Π³ <packaging>, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ WAR, Π° ΠΎΠ±ΡΡΠ½ΡΠΉ JAR.
- ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
- ΠΠ΅Π½ΡΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ javax.enterprise:cdi-api Π½Π° io.quarkus:quarkus-arc, ΡΠ΄Π°Π»ΡΡ <scope>provided</scope>, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ (ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΠ°ΠΌ) ΡΡΠΎ Quarkus-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ injection Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ CDI.
- ΠΠ΅Π½ΡΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec Π½Π° io.quarkus:quarkus-undertow, ΡΠ΄Π°Π»ΡΡ <scope>provided</scope>, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ (ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΠ°ΠΌ) ΡΡΠΎ Quarkus-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ servletβΠΎΠ².
- Π£Π΄Π°Π»ΡΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ 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 and mvnw.cmd ΠΈ ΠΏΠ°ΠΏΠΊΡ .mvn: Maven Wrapper ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Maven Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Maven Π±Π΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΎΠΉ ΡΠ°ΠΌΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ.
- ΠΠ°ΠΏΠΊΠ° docker (Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/main/): Π·Π΄Π΅ΡΡ Π»Π΅ΠΆΠ°Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Dockerfile Π΄Π»Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² native ΠΈ jvm (Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ .dockerignore).
- ΠΠ°ΠΏΠΊΠ° resources (Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/main/): Π·Π΄Π΅ΡΡ Π»Π΅ΠΆΠΈΡ ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΉΠ» application.properties ΠΈ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΡΡΠ°ΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Quarkus index.html (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Run the modernized helloworld ).
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ helloworld
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ quarkus:dev, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Quarkus Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ development mode (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π²ΠΎΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΡΠΎΡ ΡΠ°Π³ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²Π½Π΅ΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
$ ./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 member: org.jboss.as.quickstarts.helloworld.HelloWorldServlet#helloService). ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ HelloWorldServlet Π½ΡΠΆΠ΅Π½ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ HelloService, Π° Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ (Ρ ΠΎΡΡ ΠΎΠ±Π° ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ΅).
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ
Π‘ΠΌΠΎΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡ HelloService β Π² Π½Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Ρ ΡΠ°ΠΊΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΅Π΅ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎΠ±Ρ Quarkus ΠΌΠΎΠ³ ΠΈΡΠΊΠ°ΡΡ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ bean. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ stateless-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @ApplicationScoped ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
@ApplicationScoped
public class HelloService {
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π·Π΄Π΅ΡΡ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ Π²Π°Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ (ΡΠΌ. ΡΡΡΠΎΠΊΡ Π½ΠΈΠΆΠ΅), ΠΈ ΡΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΡΡΠ½ΡΡ, Π²ΠΎΡ ΡΠ°ΠΊ:
import javax.enterprise.context.ApplicationScoped;
ΠΡΠ»ΠΈ ΡΠΎΠΌΠ½Π΅Π²Π°Π΅ΡΠ΅ΡΡ, ΠΊΠ°ΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ scope Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ beanβΠ° ΠΎΠ½Π° Π½Π΅ Π·Π°Π΄Π°Π½Π° Π²ΠΎΠΎΠ±ΡΠ΅, ΠΏΡΠΎΡΡΡΠ΄ΠΈΡΡΠΉΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΡΡ ΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ./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: Π‘ΡΡΠ°Π½ΠΈΡΠ° The 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.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ±Π΅Ρ-jar, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΏΠ°ΠΏΠΊΡ /target/lib (Π° Π½Π΅ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ Π² ΡΠ°ΠΉΠ» JAR). ΠΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎ JAR ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ ΠΈΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ Ρ
ΠΎΡΡΠ΅, ΡΡΠ΄Π° Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌ JAR-ΡΠ°ΠΉΠ», ΡΠ°ΠΊ ΠΈ ΠΏΠ°ΠΏΠΊΡ /lib, ΡΡΠΈΡΡΠ²Π°Ρ ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Class-Path Π² ΡΠ°ΠΉΠ»Π΅ MANIFEST.MF Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ JAR ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ²Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ JARβΠΎΠ² ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ lib.
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ±Π΅Ρ-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 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ standalone-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 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 Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
Π§ΠΈΡΠ°Π΅ΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π½Π°Π΄ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ native-ΠΏΡΠΎΡΠΈΠ»Ρ 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 ΡΡΠΎΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΆΠΈΠ·Π½ΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π²Ρ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ ΡΡΠ΄ΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅, Π³Π΄Π΅ ΡΠ΅ΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΡΡΡ ΡΠ°ΡΡ
ΠΎΠ΄ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com