рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдХ рд╕реБрдкрд░рд╕реЛрдирд┐рдХ рдЙрдкрдкрд░рдорд╛рдгреНрд╡рд┐рдХ рдЬрд╛рд╡рд╛ рд╣реИред рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдХ рд╕реБрдкрд░рд╕реЛрдирд┐рдХ рдЙрдкрдкрд░рдорд╛рдгреНрд╡рд┐рдХ рдЬрд╛рд╡рд╛ рд╣реИред рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди

рдкрд░рд┐рдЪрдп

XNUMX рдорд╛рд░реНрдЪ рдХреЛ, рд░реЗрдбрд╣реИрдЯ (рдЬрд▓реНрдж рд╣реА рдЖрдИрдмреАрдПрдо) рдкреНрд░рд╕реНрддреБрдд рдирдИ рд░реВрдкрд░реЗрдЦрд╛ - рдХреНрд╡рд╛рд░реНрдХрд╕. рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ GraalVM рдФрд░ OpenJDK рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ Kubernetes рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕реНрдЯреИрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЬреЗрдкреАрдП/рд╣рд╛рдЗрдмрд░рдиреЗрдЯ, рдЬреЗрдПрдХреНрд╕-рдЖрд░рдПрд╕/рд░реЗрд╕реНрдЯреЗрд╕реА, рдПрдХреНрд▓рд┐рдкреНрд╕ рд╡рд░реНрдЯ.рдПрдХреНрд╕, рдиреЗрдЯреНрдЯреА, рдЕрдкрд╛рдЪреЗ рдХреИрдорд▓, рдХрд╛рдлреНрдХрд╛, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдФрд░ рдЕрдиреНрдпред

рд▓рдХреНрд╖реНрдп рдЬрд╛рд╡рд╛ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдордВрдЪ рдмрдирд╛рдирд╛ рд╣реИ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рджреЛрдиреЛрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рджреЗрдЦреЗрдВ рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг, рддреЛ рдХреНрд╡рд╛рд░реНрдХрд╕ "рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕/рдХреЛрдб рдЬреЗрдирд░реЗрдЯрд░" рдФрд░ "рд╣рд╛рдИ-рд▓реЗрд╡рд▓ рдлреБрд▓рд╕реНрдЯреИрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреЗ рдмреАрдЪ рдХрд╣реАрдВ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реНрдг-рд╕реНрдЯреИрдХ рддрдХ рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐... рдмреИрдХрдПрдВрдб рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХреА рдмрд╣реБрдд рддреЗрдЬрд╝ рдЧрддрд┐ рдФрд░ рдХрдо рдореЗрдореЛрд░реА рдЦрдкрдд рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдкреНрд░рд╛рд░рдВрдн рд╕реЗ рдкреНрд░рдердо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдХ рдХрд╛ рд╕рдордп:

рд╡рд┐рдиреНрдпрд╛рд╕
рдмрд╛рдХреА
рдмрд╛рдХреА+рдЬреЗрдкреАрдП

рдХреНрд╡рд╛рд░реНрдХрд╕+рдЧреНрд░реЗрд▓рд╡реАрдПрдо
0.014
0.055

рдХреНрд╡рд╛рд░реНрдХрд╕+рдУрдкрдирдЬреЗрдбреАрдХреЗ
0.75
2.5

рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рд╕реНрдЯреИрдХ*
4.3
9.5

рдореЗрдореЛрд░реА рдЦрдкрдд (рдПрдордмреА):

рд╡рд┐рдиреНрдпрд╛рд╕
рдмрд╛рдХреА
рдмрд╛рдХреА+рдЬреЗрдкреАрдП

рдХреНрд╡рд╛рд░реНрдХрд╕+рдЧреНрд░реЗрд▓рд╡реАрдПрдо
13
35

рдХреНрд╡рд╛рд░реНрдХрд╕+рдУрдкрдирдЬреЗрдбреАрдХреЗ
74
130

рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рд╕реНрдЯреИрдХ*
140
218

рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА, рд╣реИ рдирд╛?

*рдореБрдЭреЗ рдЗрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реА, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЙрдбреА рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╣реИ.

рдирдорд╕реНрддреЗ рджреБрдирд┐рдпрд╛!

рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

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

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

рдпрд╣ рд╡рд╕реНрддреБрддрдГ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдФрд░ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ! рдЖрдк рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдореЗрд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

mvn compile quarkus:dev
тАж
$ curl http://localhost:8080/hello
hello

рдирд┐рдпрдорд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдирд╣реАрдВ рд╣реИ! рдХреНрд╡рд╛рд░реНрдХрд╕ рд╣реЙрдЯ рд░реАрд▓реЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рднреА рддреЗрдЬ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЗрдВрдЬреЗрдХреНрд╖рди. рд╕реЗрд╡рд╛ рдХреЛрдб:

@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!

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рдкрд░рд┐рдЪрд┐рдд рд░реВрдкрд░реЗрдЦрд╛рдУрдВ - рд╕реАрдбреАрдЖрдИ рдФрд░ рдЬреЗрдПрдХреНрд╕-рдЖрд░рдПрд╕ рд╕реЗ рдорд╛рдирдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реАрдбреАрдЖрдИ рдФрд░ рдЬреЗрдПрдХреНрд╕-рдЖрд░рдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдХреБрдЫ рднреА рдирдпрд╛ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛

рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдФрд░ рдорд╛рдирдХ рдЬреЗрдкреАрдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред REST рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рдиреНрдпреВрдирддрдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ, рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ @Entity рдФрд░ application.properties рдореЗрдВ рдбреЗрдЯрд╛рд╕реНрд░реЛрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред

рд╕рднреАред рдХреЛрдИ рд╕реЗрд╢рдирдлрд╝реИрдХреНрдЯрд░реА, рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдВрд╕.рдПрдХреНрд╕рдПрдордПрд▓ рдпрд╛ рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВред рд╣рдо рдХреЗрд╡рд▓ рд╡рд╣реА рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрдХ Persistence.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ORM рдкрд░рдд рдХреЛ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдХреИрд╢рд┐рдВрдЧ, рдПрдХ-рд╕реЗ-рдЕрдиреЗрдХ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рд╕реНрдерд╛рдиреАрдп рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧред рд╡реЗред рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдХреЗ рдХреИрд╢ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╣реИ.

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрд╡рд╛рд░реНрдХрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХреЛрдб рднрд┐рдиреНрди рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

@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 + "!";
       });
   }
}

рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЛ рднреА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рд╣реЛрдЧрд╛ред

рдкрд░реАрдХреНрд╖рдг

рдХреНрд╡рд╛рд░реНрдХрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг JUnit4 рдпрд╛ JUnit5 рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдЗрд╕реЗ рд░реЗрд╕реНрдЯрдПрд╢реНрдпреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

@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 рдПрдиреЛрдЯреЗрд╢рди рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдмрд╛рдХреА рдХреЛрдб рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рдЪреВрдВрдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ GraalVM рдХреЗ рд╕рд╛рде рдордЬрдмреВрддреА рд╕реЗ рдПрдХреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GraalVM рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ GRAALVM_HOME рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЧреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

mvn package -Pnative

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди JVM рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред @SubstrateTest рдПрдиреЛрдЯреЗрд╢рди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реИред рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

рдЙрддреНрдкрдиреНрди рдЫрд╡рд┐ рдХреЛ рдбреЙрдХрд░ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдпрд╛ рдУрдкрдирд╢рд┐рдлреНрдЯ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдирд┐рд░реНрджреЗрд╢.

рдЙрдкрдХрд░рдг

рдХреНрд╡рд╛рд░реНрдХрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рд╡реЗрди рдФрд░ рдЧреНрд░реИрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреНрд░реИрдбрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдорд╛рд╡реЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд┐рд▓рд╣рд╛рд▓ рдЧреНрд░реИрдбрд▓ рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдкрд╛рдардпрдкреБрд╕реНрддрдХ.

рд╡рд┐рд╕реНрддрд╛рд░

рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рдгреАрдп рдврд╛рдБрдЪрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓ рдПрдХ рдЖрджреЗрд╢ рд╣реИ 40 рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рд╕рдорд░реНрдерди рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ ╨╕ рдЕрдкрд╛рдЪреЗ рдКрдВрдЯ рдЪрд▓ рд░рд╣реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореМрдЬреВрдж рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреНрд╡рд╛рд░реНрдХрд╕ рдЙрд╕ рд╕рдордп рдХреЗ рд░реБрдЭрд╛рдиреЛрдВ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдиреБрд░реВрдк рд╣реИред рдмреИрдХрдПрдВрдб рдХреЛрдб рд╡рд┐рдХрд╛рд╕ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдврд╛рдВрдЪрд╛ рдбреЙрдХрд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдХрд░ рд╕реЗрд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдФрд░ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ GraalVM рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдкреАрдврд╝реА рд╣реИ, рдЬреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝реА рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдХрдо рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдкреНрд░рддрд┐ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЬреБрдиреВрди рдХреЗ рд╣рдорд╛рд░реЗ рд╕рдордп рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ - quarkus.io. рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ GitHub.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ