如何创建你的第一个 Quarkus 应用程序

Quarkus 框架被认为是 Kubernetes 原生 Java 的后起之秀。
68 位读者喜欢这篇文章。
woman on laptop sitting at the window

CC BY 3.0 US Mapbox Uncharted ERG

编程语言和框架不断发展,以帮助希望以更快的速度、更好的性能和更小的 footprint 开发和部署应用程序的开发人员。工程师们不断努力开发“下一个重大事件”,以满足开发人员对更快部署的需求。

Quarkus 是 Java 世界的最新成员,被认为是 Kubernetes 原生 Java 的后起之秀。它于 2019 年问世,旨在优化 Java 和常用的开源框架,以适应云原生环境。借助 Quarkus 框架,您可以轻松地使用 Java 实现无服务器。本文解释了为什么这个开源框架最近备受关注,以及如何创建你的第一个 Quarkus 应用程序。

什么是 Quarkus?

Quarkus 重新构想了 Java 堆栈,以提供创建高效、高速应用程序所需的性能特征和开发者体验。它是一个容器优先和云原生的 Java 应用开发框架。

你可以使用现有的技能,以新的方式使用 Quarkus 进行编码。它还有助于减轻迁移到以 Kubernetes 为中心的环境的技术负担。像 Kubernetes 这样的高密度部署平台需要启动时间更快、内存使用率更低的应用程序。Java 仍然是一种流行的软件开发语言,但由于其以牺牲 RAM 和 CPU 为代价专注于生产力而受到影响。

在虚拟化、无服务器和云的世界中,许多开发人员发现 Java 并不是开发云原生应用程序的最佳选择。然而,Quarkus(也称为“超音速和亚原子 Java”)的引入有助于解决这些问题。

Quarkus 有哪些优势?

 

Quarkus 提高了启动时间、执行成本和生产力。其主要目标是减少应用程序的启动时间和内存占用,同时提供“开发者乐趣”。它通过原生编译和热重载功能实现这些目标。

运行时优势

 

  • 降低内存占用
  • 减少 RSS 内存,仅使用传统云原生堆栈所需内存的 10%。
  • 提供非常快的启动速度
  • 提供容器优先的框架,因为它被设计为在容器 + Kubernetes 环境中运行。
  • 重点关注使事物在 Kubernetes 中正常工作。

开发优势

 

  • 在开发和编码期间提供非常快速的实时重新加载。
  • 使用“最佳”的库和标准。
  • 带来规范和强大的支持。
  • 统一并支持命令式和响应式(非阻塞)风格。

在 10 分钟内创建一个 Quarkus 应用程序

现在你已经了解了你可能想要尝试 Quarkus 的原因,我将向你展示如何使用它。

首先,确保你具备创建 Quarkus 应用程序的先决条件。

  • IDE,例如 Eclipse、IntelliJ IDEA、VS Code 或 Vim
  • 安装了 JDK 8 或 11+,并正确配置了 JAVA_HOME
  • Apache Maven 3.6.2+

你可以使用 Maven 命令或使用 code.quarkus.io 创建项目。

使用 Maven 命令

创建新的 Quarkus 项目的最简单方法之一是打开终端并运行以下命令,如 入门指南 中所述。

Linux 和 macOS 用户

mvn io.quarkus:quarkus-maven-plugin:1.13.2.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
cd getting-started

Windows 用户

  • 如果你使用的是 cmd,请不要使用反斜杠 (\)
    mvn io.quarkus:quarkus-maven-plugin:1.13.2.Final:create -DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DclassName="org.acme.getting.started.GreetingResource" -Dpath="/hello"
  • 如果你使用的是 PowerShell,请将 -D 参数用双引号括起来

    mvn io.quarkus:quarkus-maven-plugin:1.13.2.Final:create "-DprojectGroupId=org.acme" "-DprojectArtifactId=getting-started" "-DclassName=org.acme.getting.started.GreetingResource" "-Dpath=/hello"

使用 code.quarkus.io

首先,访问 code.quarkus.io 以创建一个快速的 Quarkus 项目。此页面将帮助你引导启动你的 Quarkus 应用程序并发现其扩展生态系统。

接下来,选择你需要的任何扩展。将 Quarkus 扩展视为项目依赖项。扩展通过配置、启动和将框架或技术集成到你的 Quarkus 应用程序中来提供帮助。它们还完成了所有繁重的工作,为 GraalVM Java 运行时提供正确的信息,以便你的应用程序能够本地编译。

Quarkus 提供了不断增长的 50 多个“最佳”库列表,这些库深受开发人员喜爱和使用。

预期结果

无论你以何种方式创建 Quarkus 项目,它都会在 ./getting-started 中生成以下内容

  • Maven 结构
  • 一个在 /hello 上公开的 org.acme.getting.started.GreetingResource 资源
  • 相关的单元测试
  • 一个在应用程序启动后可在 http://localhost:8080 上访问的着陆页
  • 示例 Dockerfile 文件
  • 应用程序配置文件

项目详情

在项目创建期间,它会生成一个 src/main/java/org/acme/getting/started/GreetingResource.java 文件,其中包含以下内容

package org.acme.getting.started;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

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

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

这是一个非常简单的 REST 端点,它向 /hello 端点上的请求返回 “Hello”。

运行应用程序

现在一切都已设置好以运行你的应用程序。

要做到这一点,输入 ./mvnw compile quarkus:dev

 

一旦它启动,你就可以请求提供的端点。

 

使用 Ctrl+C 停止应用程序,或保持其运行并享受极速热重载。

使用开发模式

要在开发模式下运行 Quarkus,请输入 quarkus:dev

此命令启用热部署。这意味着,每当你更改你的 Java 或资源文件并刷新浏览器时,你将自动看到所有更改。这也适用于资源文件,例如配置文件属性文件。刷新浏览器会触发工作区的扫描;如果它发现任何更改,它会重新编译 Java 文件,重新部署应用程序,并通过重新部署的应用程序来服务你的请求。如果存在任何编译问题,Error 404 页面将立即为你提供反馈并帮助解决问题。

打包并运行应用程序

要打包应用程序,请使用 ./mvnw package。它在 /target 中生成多个输出。

  • 其中之一是 quarkus-app 目录,其中包含作为可执行 .jar 文件的 quarkus-run.jar 文件。请确保它不是“über-jar”,因为依赖项被复制到 quarkus-app/lib/ 的子目录中。
  • 另一个是 getting-started-1.0.0-SNAPSHOT.jar,它仅包含你的项目的类和资源。它是 Maven 构建生成的常规工件,而不是可运行的 .jar 文件。

使用以下命令运行你的应用程序

java -jar target/quarkus-app/quarkus-run.jar

是的,它就是如此简单、容易和有趣。

了解更多

Quarkus 提供了几个官方资源,你可以在其中了解更多关于它的信息。

接下来阅读什么
Saumya_Singh_RedHat
Red Hat 工程师 | 20 年 GirlScript 项目经理 | GHCI 学者 | Red Hat 国际开源奖决赛入围者 | SIH、21U21 奖项获得者 | Google Connect Winner'19 | GCI 导师

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.