ืงื•ื•ืึทืจืงื•ืก ืื™ื– ืึท ืกื•ืคึผืขืจืกืึทื ื™ืง ืกื•ื‘ืึทื˜ืึธืžื™ืฉืข ื“ื–ืฉืึทื•ื•ืึท. ืงื•ืจืฅ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื“ื™ ืคืจื™ื™ืžื•ื•ืขืจืง

ืงื•ื•ืึทืจืงื•ืก ืื™ื– ืึท ืกื•ืคึผืขืจืกืึทื ื™ืง ืกื•ื‘ืึทื˜ืึธืžื™ืฉืข ื“ื–ืฉืึทื•ื•ืึท. ืงื•ืจืฅ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื“ื™ ืคืจื™ื™ืžื•ื•ืขืจืง

ื”ืงื“ืžื”

ืื•ื™ืฃ XNUMX ืžืขืจ, RedHat (ื‘ืึทืœื“ IBM) ื“ืขืจืœืื ื’ื˜ ื ื™ื™ึท ืคืจื™ื™ืžื•ื•ืขืจืง - ืงื•ื•ืึทืจืงื•ืก. ืœื•ื™ื˜ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก, ื“ืขื ืคืจื™ื™ืžื•ื•ืขืจืง ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ GraalVM ืื•ืŸ OpenJDK HotSpot ืื•ืŸ ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ Kubernetes. ื“ื™ ืงื•ื•ืึทืจืงื•ืก ืกื˜ืึทืง ื›ื•ืœืœ: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ืื•ืŸ ืื ื“ืขืจืข.

ื“ืขืจ ืฆื™ืœ ืื™ื– ืฆื• ืžืึทื›ืŸ Java ื“ื™ ืœื™ื“ื™ื ื’ ืคึผืœืึทื˜ืคืึธืจืžืข ืคึฟืึทืจ ืงื•ื‘ืขืจื ืขื˜ืขืก ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืกืขืจื•ื•ืขืจืœืขืกืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’, ืคึผืจืึทื•ื•ื™ื™ื“ื™ื ื’ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืžื™ื˜ ืึท ื™ื•ื ืึทืคื™ื™ื“ ืฆื•ื’ืึทื ื’ ืฆื• ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ืŸ ื‘ื™ื™ื“ืข ืจื™ืึทืงื˜ื™ื•ื• ืื•ืŸ ื™ืžืคึผืขืจืึทื˜ื™ื•ื• ืกื˜ื™ื™ืœื–.

ืงื•ืงืŸ ืื•ื™ืฃ this ืงืœืึทืกืึทืคืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืคืจืึทืžืขื•ื•ืึธืจืงืก, ื“ืขืžืึธืœื˜ Quarkus ืื™ื– ืขืจื’ืขืฅ ืฆื•ื•ื™ืฉืŸ "ืึทื’ืจืขื’ืึทื˜ืึธืจืก / ืงืึธื“ ื’ืขื ืขืจืึทื˜ืึธืจืก" ืื•ืŸ "ื”ื•ื™ืš-ืžื“ืจื’ื” ืคื•ืœืกื˜ืึทืง ืคืจืึทืžืขื•ื•ืึธืจืงืก". ื“ืึธืก ืื™ื– ืฉื•ื™ืŸ ืžืขืจ ื•ื•ื™ ืึท ืึทื’ื’ืจืขื’ืึทื˜ืึธืจ, ืึธื‘ืขืจ ืขืก ืงืขืŸ ื ื™ืฉื˜ ืืคื™ืœื• ื“ืขืจื’ืจื™ื™ื›ืŸ ืคื•ืœ ืกื˜ืึทืง ื•ื•ื™ื™ึทืœ ... ื˜ื™ื™ืœืขืจื“ ืคึฟืึทืจ ื‘ืึทืงืขื ื“ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’.

ื–ื™ื™ืขืจ ื”ื•ื™ืš ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื˜ืขืจ ืื•ืŸ ื ื™ื“ืขืจื™ืง ื–ื›ึผืจื•ืŸ ืงืึทื ืกืึทืžืฉืึทืŸ ื–ืขื ืขืŸ ืฆื•ื’ืขื–ืื’ื˜. ื“ืึธ ื–ืขื ืขืŸ ื“ื™ ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืก ื•ื•ืขื‘ื–ื™ื™ื˜ืœ:

ืฆื™ื™ื˜ ืคื•ืŸ ืึธื ื”ื™ื™ื‘ ืฆื• ืขืจืฉื˜ืขืจ ืขื ื˜ืคืขืจ (s):

ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ
ืจื•
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus + OpenJDK
0.75
2.5

ื˜ืจืึทื“ื™ืฆื™ืึธื ืขืœ ืงืœืึธื•ื“ ื’ืขื‘ื•ื™ืจืŸ ืกื˜ืึทืง *
4.3
9.5

ื–ื›ึผืจื•ืŸ ืงืึทื ืกืึทืžืฉืึทืŸ (Mb):

ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ
ืจื•
REST+JPA

Quarkus+GraalVM
13
35

Quarkus + OpenJDK
74
130

ื˜ืจืึทื“ื™ืฆื™ืึธื ืขืœ ืงืœืึธื•ื“ ื’ืขื‘ื•ื™ืจืŸ ืกื˜ืึทืง *
140
218

ื™ืžืคึผืจืขืกื™ื•ื•, ืื™ื– ื ื™ื˜ ืขืก?

*ืื™ืš ื”ืึธื‘ ื ื™ื˜ ื’ืขืคึฟื•ื ืขืŸ ืงื™ื™ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ืขื ื˜ืขื›ื ืึธืœืึธื’ื™ืข ืึธื ืœื™ื™ื’ืŸ, ืžื™ืจ ืงืขื ืขืŸ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ื“ืึธืก ืื™ื– ืึท ืžื™ืŸ ืคื•ืŸ ืกืคึผืจื™ื ื’ ืฉื˜ื™ื•ื•ืœ ืžื™ื˜ ืึทืŸ ื ืึธืš ื’ื•ืฃ ืงื™ื˜.

ื”ืขืœื ื•ื•ืขืœื˜!

ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ Quarkus ื•ื•ืึธืœื˜ ืงื•ืงืŸ ื•ื•ื™ ื“ืึธืก:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

ืขืก ืื™ื– ืžืžืฉ ืื™ื™ืŸ ืงืœืึทืก ืื•ืŸ ื“ืึธืก ืื™ื– ื’ืขื ื•ื’! ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื ื™ืฆืŸ Maven ืื™ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืžืึธื“ืข:

mvn compile quarkus:dev
โ€ฆ
$ curl http://localhost:8080/hello
hello

ื“ืขืจ ื—ื™ืœื•ืง ืคื•ืŸ ืึท ืจืขื’ื•ืœืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืึทื– ืขืก ืื™ื– ืงื™ื™ืŸ ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืงืœืึทืก! Quarkus ืฉื˜ื™ืฆื˜ ื”ื™ื™ืก ืจื™ืœืึธื•ื“, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื˜ื•ื™ืฉืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึธืŸ ืจื™ืกื˜ืึทืจื˜ื™ื ื’ ืขืก, ื•ื•ืึธืก ืžืื›ื˜ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืืคื™ืœื• ืคืึทืกื˜ืขืจ.

ื•ื•ืืก ืื™ื– ื ืขืงืกื˜? ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืึท ืกืขืจื•ื•ื™ืก ืฆื• ืึท ืงืึธื ื˜ืจืึธืœืœืขืจ ืžื™ื˜ ืึทืŸ ืึทื ืึธื˜ืึทืฆื™ืข ืึทืจื™ื™ึทื ืฉืคึผืจื™ืฆืŸ. ืกืขืจื•ื•ื™ืก ืงืึธื“:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

ืงืึธื ื˜ืจืึธืœืœืขืจ:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– Quarkus ื ื™ืฆื˜ ื ืึธืจืžืึทืœ ืึทื ืึทื˜ื™ื™ืฉืึทื ื– ืคื•ืŸ ื‘ืึทืงืึทื ื˜ ืคืจืึทืžืขื•ื•ืึธืจืงืก - CDI ืื•ืŸ JAX-RS. ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืœืขืจื ืขืŸ ืขืคึผืขืก ื ื™ื™ึท ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื’ืขืืจื‘ืขื˜ ืžื™ื˜ CDI ืื•ืŸ JAX-RS ืคืจื™ืขืจ, ื“ืึธืš.

ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก

ื›ื™ื™ื‘ืขืจื ื™ื™ื˜ ืื•ืŸ ื ืึธืจืžืึทืœ ื“ื–ืฉืคึผืึท ืึทื ืึทื˜ื™ื™ืฉืึทื ื– ืคึฟืึทืจ ืขื ื˜ื™ื˜ื™ื– ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜. ื•ื•ื™ ืžื™ื˜ REST ืงืึทื ื˜ืจืึธื•ืœืขืจื–, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ืžื™ื ื™ืžื•ื ืคื•ืŸ ืงืึธื“. ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ืึธื ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื™ืŸ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื˜ืขืงืข, ืœื™ื™ื’ืŸ ืึทื ืึทื˜ื™ื™ืฉืึทื ื– @Entity ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื“ืึทื˜ืึทืกืึธื•ืจืก ืื™ืŸ ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ.ืคึผืจืึธืคึผืขืจื˜ื™ืขืก.

ืึทืœืข. ืงื™ื™ืŸ sessionFactory, persistence.xml ืึธื“ืขืจ ืื ื“ืขืจืข ืกืขืจื•ื•ื™ืก ื˜ืขืงืขืก. ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ ื‘ืœื•ื™ื– ื“ื™ ืงืึธื“ ื•ื•ืึธืก ืื™ื– ื“ืืจืฃ. ืึธื‘ืขืจ, ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืึท persistence.xml ื˜ืขืงืข ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ORM ืฉื™ื›ื˜ืข ืžืขืจ ืคื™ื™ื ืœื™.

ืงื•ื•ืึทืจืงื•ืก ืฉื˜ื™ืฆื˜ ืงืึทื˜ืฉื™ื ื’ ืคื•ืŸ ืขื ื˜ื™ื˜ื™ื–, ื–ืึทืžืœื•ื ื’ืขืŸ ืคึฟืึทืจ ืื™ื™ืŸ-ืฆื•-ืคื™ืœืข ื‘ืืฆื™ื•ื ื’ืขืŸ ืื•ืŸ ืคึฟืจืื’ืŸ. ืื™ืŸ ืขืจืฉื˜ืขืจ ื‘ืœื™ืง ืขืก ืงื•ืงื˜ ื’ืจื•ื™ืก, ืึธื‘ืขืจ ืขืก ืื™ื– ื”ื™ื’ืข ืงืึทื˜ืฉื™ื ื’, ืคึฟืึทืจ ืื™ื™ืŸ Kubernetes ื ืึธื“ืข. ื™ืขื ืข. ื“ื™ ืงืึทื˜ืฉืขืก ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื ืึธื•ื“ื– ื–ืขื ืขืŸ ื ื™ืฉื˜ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ืžื™ื˜ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ. ืื™ืš ื”ืืฃ ืื– ื“ืืก ืื™ื– ืฆื™ื™ื˜ื•ื•ื™ื™ืœื™ื’.

ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืงืึธื“ ื“ื•ืจื›ืคื™ืจื•ื ื’

ื•ื•ื™ ื“ืขืจืžืื ื˜ ืื•ื™ื‘ืŸ, Quarkus ืื•ื™ืš ืฉื˜ื™ืฆื˜ ื“ื™ ืจื™ืึทืงื˜ื™ื•ื• ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืกื˜ื™ืœ. ื“ืขืจ ืงืึธื“ ืคื•ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืึท ืึทื ื“ืขืจืฉ ืคืึธืจืขื.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

ืึทืกื™ื ื˜ืฉืจืึธื ืึธื•ืก ืงืึธื“ ืงืขื ืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื˜ืจืึทื ืกืคืขืจื“ ืฆื• ื“ื™ ืกืขืจื•ื•ื™ืก, ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข.

ื˜ืขืกื˜ื™ื ื’

ื˜ืขืกืฅ ืคึฟืึทืจ Quarkus ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ JUnit4 ืึธื“ืขืจ JUnit5. ื•ื ื˜ืขืจ ืื™ื– ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคึผืจืึธื‘ืข ืคึฟืึทืจ ืึท ืขื ื“ืคึผื•ื™ื ื˜, ืขืก ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืžื™ื˜ RestAssured, ืึธื‘ืขืจ ืืŸ ืื ื“ืขืจ ืคืจื™ื™ืžื•ื•ืขืจืง ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

ื“ื™ @QuarkusTest ืึทื ืึธื˜ืึทืฆื™ืข ื™ื ืกื˜ืจืึทืงืฅ ืื™ืจ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื™ื“ืขืจ ืื™ืจ ืœื•ื™ืคืŸ ื˜ืขืกืฅ. ื“ื™ ืžื ื•ื—ื” ืื™ื– ืงืึธื“ ื‘ืึทืงืึทื ื˜ ืฆื• ืึทืœืข ื“ืขื•ื•ืขืœืึธืคึผืขืจืก.

ืคึผืœืึทื˜ืคืึธืจืžืข-ืกืคึผืขืฆื™ืคื™ืฉ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื–ื™ื ื˜ Quarkus ืื™ื– ื˜ื™ื™ื˜ืœื™ ื™ื ืึทื’ืจื™ื™ื˜ื™ื“ ืžื™ื˜ GraalVM, ืขืก ืื™ื– ื“ืึธืš ืžืขื’ืœืขืš ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืคึผืœืึทื˜ืคืึธืจืžืข-ืกืคึผืขืฆื™ืคื™ืฉ ืงืึธื“. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ GraalVM ืื•ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ GRAALVM_HOME ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง. ื•ื•ื™ื™ื˜ืขืจ ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ืึท ืคึผืจืึธืคื™ืœ ืคึฟืึทืจ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื•ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืขืก ื•ื•ืขืŸ ืื™ืจ ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ:

mvn package -Pnative

ื™ื ื˜ืขืจืขืกื˜ื™ื ื’ืœื™, ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ืขืกื˜ืขื“. ืื•ืŸ ื“ืึธืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ื•ื•ื™ื™ึทืœ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื’ืขื‘ื•ื™ืจืŸ ืงืึธื“ ืงืขืŸ ื–ื™ื™ืŸ ืึทื ื“ืขืจืฉ ืคื•ืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืื•ื™ืฃ ื“ื™ JVM. ื“ื™ @SubstrateTest ืึทื ืึธื˜ืึทืฆื™ืข ืœื•ื™ืคื˜ ืคึผืœืึทื˜ืคืึธืจืžืข-ืกืคึผืขืฆื™ืคื™ืฉ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึธื“. ืจื™ื•ื–ื™ื ื’ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืคึผืจืึธื‘ืข ืงืึธื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื™ืจื•ืฉื”; ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ืขืจ ืงืึธื“ ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ ืึท ืคึผืœืึทื˜ืคืึธืจืžืข-ืึธืคืขื ื’ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ืงื•ืงืŸ ื•ื•ื™ ื“ืึธืก:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื‘ื™ืœื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคึผืึทืงื™ื“ื–ืฉื“ ืื™ืŸ ื“ืึธืงืงืขืจ ืื•ืŸ ืœื•ื™ืคืŸ ืื™ืŸ Kubernetes ืึธื“ืขืจ OpenShift, ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ืขื˜ืึทืœ ืื™ืŸ ื™ื ืกื˜ืจืึทืงืฉืึทื ื–.

ืžื›ืฉื™ืจื™ื

ื“ื™ Quarkus ืคืจื™ื™ืžื•ื•ืขืจืง ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืžื™ื˜ Maven ืื•ืŸ Gradle. Maven ืื™ื– ื’ืึธืจ ื’ืขืฉื˜ื™ืฆื˜, ื ื™ื˜ ืขื ืœืขืš Gradle. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ืื™ืŸ ื“ืขืจ ืžืึธืžืขื ื˜, Gradle ืฉื˜ื™ืฆื˜ ื ื™ืฉื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ืœื™ื™ื“ื™ืง ืคึผืจื•ื™ืขืงื˜; ืขืก ืื™ื– ื“ื™ื˜ื™ื™ืœื“ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ื™ืฃ ื“ืขื ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืœืขืจื ื‘ื•ืš.

ืขืงืกื˜ืจืขืžืขื ืฅ

ืงื•ื•ืึทืจืงื•ืก ืื™ื– ืึทืŸ ืขืงืกื˜ืขื ืกื™ื‘ืœืข ืคืจื™ื™ืžื•ื•ืขืจืง. ื“ืขืจื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ืึท ืกื“ืจ 40 ื™ืงืกื˜ืขื ืฉืึทื ื–, ื•ื•ืึธืก ืœื™ื™ื’ืŸ ืคืึทืจืฉื™ื“ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ - ืคึฟื•ืŸ ืฉื˜ื™ืฆืŸ ืคืจื™ืœื™ื ื’ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ะธ ืึทืคึผืึทื˜ืฉื™ ืงืึทืžืขืœ ืื™ื™ื“ืขืจ ืœืึธื’ื™ื ื’ ืื•ืŸ ืืจื•ื™ืกื’ืขื‘ืŸ ืžืขื˜ืจื™ืงืก ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ื‘ืึทื“ื™ื ื•ื ื’ืก. ืื•ืŸ ืขืก ืื™ื– ืฉื•ื™ืŸ ืึท ืคืึทืจืœืขื ื’ืขืจื•ื ื’ ืฆื• ืฉื˜ื™ืฆืŸ ืฉืจื™ื™ื‘ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ ืงืึธื˜ืœื™ืŸ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• Java.

ืกืึธืฃ

ืื™ืŸ ืžื™ื™ืŸ ืžื™ื™ื ื•ื ื’, ืงื•ื•ืึทืจืงื•ืก ืื™ื– ื’ืึทื ืฅ ืื™ืŸ ืฉื•ืจื” ืžื™ื˜ ื“ื™ ื˜ืจืขื ื“ืก ืคื•ืŸ ื“ื™ ืฆื™ื™ึทื˜. ื‘ืึทืงืขื ื“ ืงืึธื“ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ื– ืฉื™ื™ืŸ ื’ืจื™ื ื’ืขืจ ืื•ืŸ ื’ืจื™ื ื’ืขืจ, ืื•ืŸ ื“ืขื ืคืจื™ื™ืžื•ื•ืขืจืง ื•ื•ื™ื™ึทื˜ืขืจ ืกื™ืžืคึผืœืึทืคื™ื™ื– ืื•ืŸ ืกืคึผื™ื“ื– ืึทืจื•ื™ืฃ ื“ื™ื ืกื˜ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื“ื•ืจืš ืึทื“ื™ื ื’ ื’ืขื‘ื•ื™ืจืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ืึธืงืงืขืจ ืื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก. ื ืจื™ื–ื™ืง ืคึผืœื•ืก ืื™ื– ื“ื™ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ GraalVM ืื•ืŸ ื“ื™ ื“ื•ืจ ืคื•ืŸ ืคึผืœืึทื˜ืคืึธืจืžืข-ืึธืคืขื ื’ื™ืง ื‘ื™ืœื“ืขืจ, ื•ื•ืึธืก ืึทืœืึทื•ื– ื‘ืึทื“ื™ื ื•ื ื’ืก ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ื˜ืึทืงืข ื’ืขืฉื•ื•ื™ื ื“ ืื•ืŸ ื ืขืžืขืŸ ืึท ื‘ื™ืกืœ ื–ื™ืงืึธืจืŸ ืคึผืœืึทืฅ. ืื•ืŸ ื“ืึธืก ืื™ื– ื–ื™ื™ืขืจ ื•ื•ื™ื›ื˜ื™ืง ืื™ืŸ ืื•ื ื“ื–ืขืจ ืฆื™ื™ื˜ ืคื•ืŸ ืžืึทืกืข ืœื™ื™ึทื“ื ืฉืึทืคื˜ ืคึฟืึทืจ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ืŸ ืกืขืจื•ื•ืขืจืœืขืกืก ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ.

ื‘ืึทืึทืžื˜ืขืจ ืคึผืœืึทืฅ - quarkus.io. ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ืคึฟืึทืจ ืึท ืฉื ืขืœ ืึธื ื”ื™ื™ื‘ ื–ืขื ืขืŸ ืฉื•ื™ืŸ ื‘ื ื™ืžืฆื ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’