红帽构建的 Quarkus 入门
向红帽构建的 Quarkus 文档提供反馈 复制链接链接已复制到粘贴板!
要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。
流程
- 单击以下链接 来创建 ticket。
- 在 Summary 中输入有关此问题的简单描述。
- 在描述中提供问题或增强功能的详细描述。请包括有问题的文档 URL。
- 点 Submit 创建问题并将其路由到适当的文档团队。
第 1 章 红帽构建的 Quarkus 入门 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用红帽构建的 Quarkus 来创建使用 OpenShift 环境上运行的 Java 编写的基于微服务的应用程序。Quarkus 应用程序可以在 Java 虚拟机(JVM)上运行,或编译到原生可执行文件。原生应用的内存占用量要小,启动时间要快于其 JVM 对应部分。
您可以使用以下方法之一创建 Quarkus 应用程序:
- 使用 Apache Maven 和 Quarkus Maven 插件
- 使用 code.quarkus.redhat.com
- 使用 Quarkus 命令行界面(CLI)
您可以开始使用 Quarkus,创建、测试、软件包和运行公开 hello HTTP 端点的简单 Quarkus 项目。为了演示依赖项注入,hello HTTP 端点使用 问候 Bean。
有关开始练习的完整示例,请下载 Quarkus Quickstarts 存档或克隆 Quarkus Quickstarts Git 存储库,并进入 get -started 目录。
1.1. 关于红帽构建的 Quarkus 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 是针对容器和 Red Hat OpenShift Container Platform 优化的 Kubernetes 原生 Java 堆栈。Quarkus 设计为使用流行的 Java 标准、框架和库,如 Eclipse MicroProfile、Eclipse Vert.x、Apache Camel、Apache Kafka、使用 Jakarta Persistence 和 Jakarta REST 的 Hibernate ORM。
作为开发人员,您可以选择 Java 应用程序所需的 Java 框架,您可以在 Java 虚拟机(JVM)模式下运行,或者以原生模式编译和运行。Quarkus 提供了构建 Java 应用程序的容器优先方法。容器先行方法促进了微服务和功能的容器化和高效执行。因此,Quarkus 应用程序的内存占用空间越小,启动时间也更快。
Quarkus 还通过统一配置、自动置备未配置服务、实时编码和持续测试等功能优化应用程序开发流程,从而为您提供对代码更改的即时反馈。
有关 Quarkus 社区版本与红帽构建的 Quarkus 之间的区别,请参阅 Quarkus 社区版本与红帽构建的 Quarkus 之间的差别。
1.2. 准备您的环境 复制链接链接已复制到粘贴板!
在开始使用 Quarkus 前,您必须准备您的环境。
流程
确认您的系统中完成了以下安装:
已安装 OpenJDK 17 或 21,并设置
JAVA_HOME环境变量来指定 Java SDK 的位置。- 要下载红帽 OpenJDK 的构建,请登录红帽客户门户网站并转至 软件下载。
- 已安装 Apache Maven 3.9.9。Apache Maven 位于 Apache Maven 项目网站。
可选 :如果要使用 Quarkus 命令行界面(CLI),请确保已安装它。
- 有关如何安装 Quarkus CLI 的说明,请参阅 Quarkus CLI 中的特定于社区的信息。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
1.2.1. 关于红帽构建的 Quarkus BOMs 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 2.2 开始,所有核心 Quarkus 扩展的依赖项版本都通过使用 com.redhat.quarkus.platform:quarkus-bom 文件来管理。
Bill of Materials (BOM)文件的目的是管理项目中的 Quarkus 工件版本,以便在项目中使用 BOM 时,您不需要指定哪些依赖项版本协同工作。相反,您可以将 Quarkus BOM 文件导入到 pom.xml 配置文件,其中依赖项版本包含在 < dependencyManagement> 部分中。因此,您不需要列出由 pom.xml 文件中的指定 BOM 管理的独立 Quarkus 依赖项版本。
要查看红帽构建的 Quarkus 中支持的扩展特定 BOM 的信息,请参阅 红帽构建的 Quarkus 组件详情。
您只需要为应用程序中使用的平台成员扩展导入特定于成员的 BOM。因此,与单体单个 BOM 相比,管理的依赖项较少。由于每个特定于成员的 BOM 是通用 Quarkus BOM 的一个片段,所以您可以在不造成冲突的情况下以任何顺序导入 member BOM。
1.2.2. 关于 Apache Maven 和红帽构建的 Quarkus 复制链接链接已复制到粘贴板!
Apache Maven 是一个分布式构建自动化工具,用于 Java 应用程序开发来创建、管理和构建软件项目。
要了解更多有关 Apache Maven 的信息,请参阅 Apache Maven 文档。
Maven 存储库
Maven 存储库存储 Java 库、插件和其他构建构件。默认公共存储库是 Maven 2 Central Repository,但存储库可以是私有和内部存储库,以在开发团队之间共享通用工件。存储库也可由第三方获得。
您可以将红帽托管的 Maven 存储库用于 Quarkus 项目。
Maven 插件
Maven 插件是 POM 文件的定义部分,该文件运行一个或多个任务。红帽构建的 Quarkus 应用程序使用以下 Maven 插件:
-
Quarkus Maven 插件(
quarkus-maven-plugin) :启用 Maven 创建 Quarkus 项目,将应用程序打包到 JAR 文件,并提供 dev 模式。 -
Maven Surefire 插件(
maven-surefire-plugin): 当 Quarkus 启用测试配置集时,在构建生命周期的测试阶段使用 Maven Surefire 插件来对应用程序运行单元测试。该插件生成包含测试报告的文本和 XML 文件。
1.2.3. 为在线存储库配置 Maven settings.xml 文件 复制链接链接已复制到粘贴板!
要将红帽托管的 Quarkus 存储库与您的 Quarkus Maven 项目一起使用,请为您的用户配置 settings.xml 文件。与存储库管理器或共享服务器上的存储库一起使用的 Maven 设置可以提供更好的控制和管理性。
当您通过修改 Maven settings.xml 文件配置存储库时,更改会应用到所有 Maven 项目。如果您只想将配置应用到特定的项目,请使用 the -s 选项并指定特定于项目的 settings.xml 文件的路径。
流程
在文本编辑器中或集成开发环境(IDE)中打开 Maven
$HOME/.m2/settings.xml文件。注意如果
$HOME/.m2/目录中没有settings.xml文件,请将$MAVEN_HOME/conf/目录中的settings.xml文件复制到$HOME/.m2/目录中。在
settings.xml文件的<profiles> 元素中添加以下行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
settings.xml文件的 <activeProfiles> 元素中添加以下行并保存文件。<activeProfile>red-hat-enterprise-maven-repository</activeProfile>
<activeProfile>red-hat-enterprise-maven-repository</activeProfile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.4. 将您的 Maven 项目重新配置为红帽构建的 Quarkus 复制链接链接已复制到粘贴板!
您可以通过更改项目 POM 文件中的 Maven 配置,将 Quarkus 社区项目迁移到红帽构建的 Quarkus。
先决条件
-
您有一个使用 Maven 构建的 Quarkus 项目,它依赖于
pom.xml文件中的 Quarkus 社区工件。
流程
更改项目的
pom.xml文件的<properties> 部分中的以下值:-
将 <
quarkus.platform.group-id>属性的值改为com.redhat.quarkus.platform。 将 <
quarkus.platform.version>属性的值改为3.20.2.SP1-redhat-00003。pom.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将 <
1.3. 配置红帽构建的 Quarkus 开发人员工具 复制链接链接已复制到粘贴板!
通过使用 Quarkus 开发人员工具,您可以完成以下任务,例如:
- 为应用程序创建 Maven 项目
- 添加和配置要在应用程序中使用的扩展
- 在 OpenShift 集群中部署应用程序
1.3.1. 配置红帽构建的 Quarkus 扩展 registry 客户端 复制链接链接已复制到粘贴板!
扩展 registry ( registry.quarkus.redhat.com )用于托管红帽提供的 Quarkus 扩展。您可以通过将 registry 添加到 registry 客户端配置文件中,配置 Quarkus 开发人员工具来访问此 registry 中的扩展。registry 客户端配置文件是一个 YAML 文件,其中包含 registry 列表。
-
默认 Quarkus registry 是
registry.quarkus.io; 通常,您不需要配置它。但是,如果用户提供自定义 registry 列表,且registry.quarkus.io不在其中,则不会启用registry.quarkus.io。 - 确保您喜欢的 registry 首先出现在 registry 列表中。当 Quarkus 开发人员工具搜索 registry 时,它们从列表的顶部开始。
流程
-
打开包含扩展 registry 配置的
config.yaml文件。首次配置扩展 registry 时,您可能需要在机器的$HOME/.quarkus目录中创建config.yaml文件。 将新 registry 添加到
config.yaml文件中。例如:config.yaml
registries: - registry.quarkus.redhat.com - registry.quarkus.io
registries: - registry.quarkus.redhat.com - registry.quarkus.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. 创建 Getting Started 项目 复制链接链接已复制到粘贴板!
通过创建 getting-started 项目,您可以使用简单的 Quarkus 应用程序启动并运行。您可以使用以下方法之一创建 getting-started 项目:
- 使用 Apache Maven 和 Quarkus Maven 插件
- 使用 code.quarkus.redhat.com 生成 Quarkus Maven 项目
- 使用 Quarkus 命令行界面(CLI)
先决条件
- 您已为您的环境做好准备。如需更多信息,请参阅准备您的环境。
流程
-
根据您的要求,选择您要用来创建
获取的项目的方法。
1.4.1. 使用 Apache Maven 创建 Getting Started 项目 复制链接链接已复制到粘贴板!
您可以使用 Apache Maven 和 Quarkus Maven 插件创建一个 getting-started 项目。通过这个 get -started 项目,您可以使用简单的 Quarkus 应用程序启动并运行。
先决条件
- 您已准备了使用 Maven 的环境。如需更多信息,请参阅准备您的环境。
- 您已配置了 Quarkus Maven 存储库。要使用 Maven 创建 Quarkus 应用程序,请使用 Red Hat-hosted Quarkus 存储库。如需更多信息,请参阅为在线存储库配置 Maven settings.xml 文件。
流程
验证 Maven 是否使用 OpenJDK 17 或 21,Maven 版本是否为 3.9.9,并且
mvn可从 PATH 环境变量访问:mvn --version
mvn --versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果前面的命令没有返回 OpenJDK 17 或 21,请将路径添加到 PATH 环境变量中,然后再次输入前面的命令。
生成项目:
如果使用 Linux 或 Apple macOS,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 Microsoft Windows 命令行,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 Microsoft Windows PowerShell,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这些命令在
./get-started 目录中创建以下元素:- Maven 项目目录结构
-
在
/hello上公开的org.acme.quickstart.GreetingResource资源 - 相关的单元测试,用于在原生模式和 JVM 模式中测试您的应用程序
-
启动应用程序后可以访问
http://localhost:8080的登录页面 -
src/main/docker目录中的 Dockerfile 示例 应用程序配置文件
注意因为 Mandrel 不支持 macOS,所以您可以使用 Oracle GraalVM 在此操作系统上构建原生可执行文件。
您还可以通过直接在裸机 Linux 或 Windows 发行版上使用 Oracle GraalVM 来构建原生可执行文件。有关此过程的更多信息,请参阅 Oracle GraalVM README 和发行注记。
有关支持的配置的更多信息,请参阅 红帽构建的 Quarkus 支持的配置。
创建目录结构后,在文本编辑器中打开
pom.xml文件并检查文件的内容:pom.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pom.xml文件的<dependencyManagement> 部分包含 Quarkus BOM。因此,您不需要在pom.xml文件中列出单个 Quarkus 依赖项的版本。在此配置文件中,您还可以找到负责打包应用程序的quarkus-maven-plugin插件。请注意
pom.xml文件中的quarkus-rest(以前称为quarkus-resteasy-reactive)依赖项。此依赖项允许您使用 Jakarta REST 注解来开发 REST 应用程序:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意从红帽构建的 Quarkus 版本 3.15 开始,
quarkus-resteasy-reactive扩展被重命名为quarkus-rest。使用quarkus-resteasy-reactive依赖项的应用程序会被邀请更新其依赖项。查看
src/main/java/org/acme/quickstart/GreetingResource.java文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此文件包含一个简单的 REST 端点,它将
Hello from Quarkus REST返回为您发送到/hello端点的请求。注意使用 Quarkus 时,支持 Jakarta REST (以前称为 JAX-RS)的
Application类,但并不需要。另外,默认情况下,只创建一个GreetingResource类实例,而不是每个请求一个。您可以使用不同的*Scoped注解来配置此功能,如RequestScoped。
验证
- 以 dev 模式编译和启动应用程序。如需更多信息,请参阅 编译和启动 Red Hat build of Quarkus Getting Started 项目。
- 从 Quarkus CLI 软件包并运行 Getting Started 项目。如需更多信息,请参阅打包并运行红帽构建的 Quarkus 入门应用程序。
1.4.2. 使用 code.quarkus.redhat.com 创建 Getting Started 项目 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用 code.quarkus.redhat.com 应用程序生成 Quarkus Maven 项目,并自动添加和配置要在应用程序中使用的扩展。另外,code.quarkus.redhat.com 会自动管理将项目编译到原生可执行文件所需的配置参数。
您可以生成 Quarkus Maven 项目,包括以下活动:
- 指定应用程序的基本详情
- 选择您要包含在项目中的扩展
- 使用项目文件生成可下载存档
- 使用自定义命令编译和启动应用程序
先决条件
- 您有一个 Web 浏览器。
- 您已准备了使用 Apache Maven 的环境。如需更多信息,请参阅准备您的环境。
- 您已配置了 Quarkus Maven 存储库。要使用 Maven 创建 Quarkus 应用程序,请使用 Red Hat-hosted Quarkus 存储库。如需更多信息,请参阅为在线存储库配置 Maven settings.xml 文件。
可选: 您已安装了 Quarkus 命令行界面(CLI),这是您可以在 dev 模式中启动 Quarkus 的方法之一。
如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
流程
- 在您的 Web 浏览器中,前往 https://code.quarkus.redhat.com。
从可用版本列表中,code.quarkus.redhat.com 应用程序默认选择红帽构建的 Quarkus 的最新版本。
注意code.quarkus.redhat.com 应用程序使用最新版本的红帽构建的 Quarkus,这是首选的选项。但是,在生成项目后,您可以根据需要手动更改为
pom.xml文件中的更早的 BOM 版本,但不建议这样做。指定项目的基本详情:
-
输入项目的组名称。名称格式遵循 Java 软件包命名约定;例如,
org.acme。 -
输入项目生成的 Maven 工件的名称,如
code-with-quarkus。 选择您要用来编译和启动应用程序的构建工具。您选择的构建工具决定了以下设置:
- 生成的项目的目录结构
- 生成的项目中使用的配置文件的格式
在生成项目后,用于编译和启动 code.quarkus.redhat.com 的应用程序的自定义构建脚本和命令
注意红帽仅支持使用 code.quarkus.redhat.com 来创建 Quarkus Maven 项目。
-
输入项目的组名称。名称格式遵循 Java 软件包命名约定;例如,
指定应用程序项目的更多详情:
要显示包含更多应用程序详情的字段,请选择 More options。
-
输入您要用于项目生成的工件的版本。此字段的默认值为
1.0.0-SNAPSHOT。首选使用 语义版本,但您可以选择指定不同类型的版本。 - 选择是否希望 code.quarkus.redhat.com 将入门代码添加到项目中。将标记为"STARTER-CODE"的扩展添加到项目中时,您可以启用此选项,以便在生成项目时自动为这些扩展创建示例类和资源文件。但是,如果您没有添加提供示例代码的任何扩展,这个选项不会影响生成的项目。
注意code.quarkus.redhat.com 应用程序自动使用最新版本的红帽构建的 Quarkus。但是,如果您需要,可以在生成项目后手动更改为
pom.xml文件中的较早 BOM 版本,但不建议这样做。选择要使用的扩展。Quarkus 应用程序包含您选择的扩展作为依赖项。Quarkus 平台还确保这些扩展与将来的版本兼容。
重要不要在同一项目中使用
quarkus-rest和quarkus-resteasy扩展。两者都提供相似的功能,但它们的运作方式有所不同。使用quarkus-rest是首选的。扩展旁边的 quark 图标(
)表示扩展是红帽构建的 Quarkus 平台版本的一部分。红帽更喜欢使用来自同一平台的扩展,因为它们经过测试和验证,因此更易于使用和升级。
对于使用"STARTER-CODE"标记的扩展,您可以启用 选项自动生成初学者代码。
要确认您的选择,请选择 Generate your application。出现的对话框显示以下项目:
- 下载包含您生成的项目的存档的链接
- 您可以使用该命令编译和启动应用程序
- 要使用生成的项目文件将存档保存到机器中,请选择 Download the ZIP。
- 提取存档的内容。
验证
- 以 dev 模式编译和启动应用程序。如需更多信息,请参阅 编译和启动 Red Hat build of Quarkus Getting Started 项目。
- 从 Quarkus CLI 软件包并运行 Getting Started 项目。如需更多信息,请参阅打包并运行红帽构建的 Quarkus 入门应用程序。
1.4.2.1. 红帽构建的 Quarkus 扩展的支持等级 复制链接链接已复制到粘贴板!
红帽为 code.quarkus.redhat.com 上可用的扩展提供了 不同的 支持,供您添加到 Quarkus 项目中。每个扩展名称旁边的标签表示支持级别。
红帽不支持在生产环境中使用的未标记扩展。
红帽为红帽构建的 Quarkus 扩展提供以下级别的支持:
| 支持级别 | 描述 |
|---|---|
| 支持 | 红帽完全支持在生产环境中使用的扩展。 |
| TECH-PREVIEW | |
| 弃用 | 红帽计划使用提供相同功能的最新技术或实施来替换扩展。 |
| DEV-SUPPORT | 红帽不支持在生产环境中使用的扩展,但红帽开发人员支持他们在开发新应用程序时提供的核心功能。 |
| 实验性 | 红帽不支持在生产环境中使用的扩展。需要早期反馈以进一步成熟扩展提议。无法保证平台的稳定性或长期包含。 |
| 预览 | 红帽不支持在生产环境中使用的扩展。只在 Quarkus 社区版本中提供扩展。 |
通过单击每个扩展旁边的箭头图标(InventoryService),您可以扩展溢出菜单来访问该扩展的进一步操作。例如:
- 在命令行中使用 Quarkus Maven 插件将扩展添加到现有项目
-
复制 XML 片段,将扩展添加到项目的
pom.xml文件中 -
获取每个扩展的
groupId、artifactId和版本 - 打开扩展指南
1.4.3. 使用 quarkus CLI 创建 Getting Started 项目 复制链接链接已复制到粘贴板!
您可以使用 Quarkus 命令行界面(CLI)创建 获取 的项目。
使用 Quarkus CLI,您可以创建项目、管理扩展并运行构建和开发命令。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
先决条件
- 已安装 Quarkus CLI。如需更多信息,请参阅准备您的环境。
- 您已配置了 Quarkus 开发人员工具来访问扩展 registry 中的扩展。如需更多信息,请参阅配置红帽构建的 Quarkus 扩展 registry 客户端。
流程
要生成项目,在命令终端中输入以下命令:
quarkus create && cd code-with-quarkus
quarkus create && cd code-with-quarkusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还可以指定 'app' 子命令,例如
quarkus create app。但是,这不是强制这样做,因为如果没有指定 'app' 子命令会表示它。使用此命令,您可以在当前工作目录的名为 'code-with-quarkus' 的 文件夹中创建 Quarkus 项目。
默认情况下,
groupId、artifactId和version属性使用以下默认值指定:- groupId='org.acme'
- artifactId='code-with-quarkus'
version='1.0.0-SNAPSHOT'
要更改
groupId,artifactId, 和version属性的值,请发出quarkus create命令并在 CLI 中指定以下语法:groupId:artifactId:version例如,
quarkus create app mygroupId:myartifactid:version
注意要查看所有可用 Quarkus 命令的信息,请指定
help参数:quarkus --help
quarkus --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在文本编辑器中查看
src/main/java/org/acme/GreetingResource.java文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此文件包含一个简单的 REST 端点,它将
Hello from Quarkus REST返回为您发送到/hello端点的请求。
验证
- 以 dev 模式编译和启动应用程序。如需更多信息,请参阅 编译和启动 Red Hat build of Quarkus Getting Started 项目。
- 从 Quarkus CLI 软件包并运行 Getting Started 项目。如需更多信息,请参阅打包并运行红帽构建的 Quarkus 入门应用程序。
1.5. 编译并启动 Red Hat build of Quarkus Getting Started 项目 复制链接链接已复制到粘贴板!
创建 Quarkus Getting Started 项目后,您可以编译 Hello 应用程序,并验证 hello 端点是否返回 "Hello from Quarkus REST。
此流程使用 Quarkus 内置 dev 模式,因此您可以在应用程序运行时更新应用程序源和配置。您所做的更改出现在正在运行的应用程序中。
用于编译 Quarkus Hello 应用的命令取决于您在机器上安装的开发人员工具。
先决条件
- 您已创建了 Quarkus Getting Started 项目。
流程
- 前往 项目目录。
使用以下方法之一在 dev 模式中编译 Quarkus
Hello应用程序,具体取决于您要使用的开发人员工具:如果要使用 Apache Maven,请输入以下命令:
mvn quarkus:dev
mvn quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要使用 Quarkus 命令行界面(CLI),请输入以下命令:
quarkus dev
quarkus devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要使用 Maven 打包程序,请输入以下命令:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
以下摘录显示了预期的输出示例:
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, smallrye-context-propagation, vertx]
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, smallrye-context-propagation, vertx]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要向应用程序提供的端点发送请求,请在新的终端窗口中输入以下命令:
curl -w "\n" http://localhost:8080/hello Hello from Quarkus REST
curl -w "\n" http://localhost:8080/hello Hello from Quarkus RESTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意"\n"属性会在 命令的输出前自动添加新行,这样可防止您的终端打印 '%' 字符,或者将结果和下一个 shell 提示符放在同一行中。
1.6. 使用红帽构建的 Quarkus 依赖项注入 复制链接链接已复制到粘贴板!
通过依赖项注入,您可以完全独立于任何客户端使用的方式使用服务。它将客户端依赖项的创建与客户端的行为分开,这使得程序设计能够松散耦合。
红帽构建的 Quarkus 中的依赖关系注入基于 Quarkus ArC,它是一个基于上下文和依赖注入(CDI)的构建构建型依赖关系注入解决方案,专为 Quarkus 架构量身定制。因为 ArC 是 quarkus-rest 的传输依赖项,因为 quarkus-rest 是您的项目的依赖项,所以 ArC 已下载。
先决条件
- 您已创建了 Quarkus Getting Started 项目。
流程
要修改应用程序并添加 companion bean,请使用以下内容创建
src/main/java/org/acme/quickstart/GreetingService.java文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
src/main/java/org/acme/quickstart/GreetingResource.java以注入GreetingService,并使用它来创建新端点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您停止了应用程序,请输入以下命令之一重启它:
使用 Apache Maven:
mvn quarkus:dev
mvn quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Quarkus CLI:
quarkus dev
quarkus devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven 打包程序:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要验证端点是否返回
hello quarkus,请在新的终端窗口中输入以下命令:curl -w "\n" http://localhost:8080/hello/greeting/quarkus hello quarkus
curl -w "\n" http://localhost:8080/hello/greeting/quarkus hello quarkusCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. 测试您的红帽构建的 Quarkus 应用程序 复制链接链接已复制到粘贴板!
编译 Quarkus Getting Started 项目后,您可以通过使用 JUnit 5 框架测试应用程序来验证它是否按预期运行。
或者,您可以启用持续测试 Quarkus 应用程序。如需更多信息,请参阅启用和运行持续测试。
Quarkus 项目在 pom.xml 文件中生成以下两个测试依赖项:
-
quarkus-junit5: 测试必需,因为它提供了控制 JUnit 5 测试框架的@QuarkusTest注释。 -
rest-assured: 不需要使用rest-assured依赖项,因为它提供了一种测试 HTTP 端点的便捷方法,它已被集成。rest-assured依赖项会自动设置正确的 URL,因此不需要配置。
pom.xml 文件示例:
这些测试使用 REST 评估框架,但如果您愿意,您可以使用不同的库。
先决条件
- 您已编译了 Quarkus Getting Started 项目。如需更多信息,请参阅 编译和启动 Red Hat build of Quarkus Getting Started 项目。
流程
打开生成的
pom.xml文件并查看内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意以下属性的值:
-
设置了
java.util.logging.manager系统属性,以确保您的应用程序在测试中使用正确的日志管理器。 -
maven.home属性指向settings.xml文件的位置,您可以在其中存储您要应用到项目的自定义 Maven 配置。
-
设置了
编辑
src/test/java/org/acme/quickstart/GreetingResourceTest.java文件,以匹配以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意通过使用
QuarkusTest运行程序,您可以指示 JUnit 启动应用,然后再启动测试。使用以下方法之一运行测试:
使用 Apache Maven:
mvn test
mvn testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Quarkus CLI:
quarkus test
quarkus testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven 打包程序:
./mvnw test
./mvnw testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还可以从 IDE 运行测试。如果这样做,请先停止应用程序。
默认情况下,测试在端口
8081上运行,因此它们不会与正在运行的应用程序冲突。在 Quarkus 中,RestAssured依赖项被配置为使用此端口。注意如果要使用其他客户端,请使用
@TestHTTPResource注释,将已测试应用的 URL 直接注入到Test类中的字段中。此字段可以是String、URL或URI。您还可以在@TestHTTPResource注释中输入测试路径。例如,要测试公开给/foo的资源,请在测试中添加以下行:@TestHTTPResource("/foo") URL testUrl;@TestHTTPResource("/foo") URL testUrl;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如有必要,在
quarkus.http.test-port配置属性中指定测试端口。
1.8. 启用并运行持续测试 复制链接链接已复制到粘贴板!
使用红帽构建的 Quarkus,您可以在开发应用程序时持续测试您的代码更改。Quarkus 提供持续测试功能,您可以在进行后立即运行,并将更改保存到代码。
运行连续测试时,在启动应用程序后测试会暂停。在应用程序启动时,您可以立即恢复测试。Quarkus 应用程序决定运行哪个测试,以便测试仅在已更改的代码上运行。
Quarkus 的持续测试功能会被默认启用。您可以通过将 src/main/resources/application.properties 文件中的 quarkus.test.continuous-testing 属性设置为 disabled 来禁用连续测试。
如果您之前禁用了持续测试,并希望再次启用它,您必须重启 Quarkus 应用程序,然后才能开始测试。
先决条件
- 您已编译了 Quarkus Getting Started 应用程序(或其他任何应用程序)。如需更多信息,请参阅 编译和启动 Red Hat build of Quarkus Getting Started 项目。
流程
启动 Quarkus 应用程序。
如果您使用 code.quarkus.redhat.com 应用程序或 Quarkus CLI 创建 Getting Started 项目,则在生成项目时会提供 Maven 打包程序。在项目目录中输入以下命令:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用在您的机器上安装的 Apache Maven 创建 Getting Started 项目,请输入以下命令:
mvn quarkus:dev
mvn quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在 dev 模式下运行持续测试并使用 Quarkus CLI,请输入以下命令:
quarkus dev
quarkus devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在生成的输出日志中查看测试状态的详情。
注意要查看输出日志,您可能需要滚动到屏幕的底部。
启用持续测试后,会显示以下信息:
Press [e] to edit command line args (currently ''), [r] to re-run, [o] Toggle test output, [:] for the terminal, [h] for more options>
Press [e] to edit command line args (currently ''), [r] to re-run, [o] Toggle test output, [:] for the terminal, [h] for more options>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当持续测试暂停时,会显示以下信息:
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,在启用连续测试后,测试会在启动应用程序后暂停。要查看用于控制如何运行测试的键盘命令,请查看 命令来控制连续测试。
-
要开始运行测试,请在键盘上按
r键。 查看更新的输出日志,以监控测试状态和测试结果,检查测试统计信息,并获取后续操作的指导。例如:
All 2 tests are passing (0 skipped), 2 tests were run in 2094ms. Tests completed at 14:45:11. Press [e] to edit command line args (currently ''), [r] to re-run, [o] Toggle test output, [:] for the terminal, [h] for more options>
All 2 tests are passing (0 skipped), 2 tests were run in 2094ms. Tests completed at 14:45:11. Press [e] to edit command line args (currently ''), [r] to re-run, [o] Toggle test output, [:] for the terminal, [h] for more options>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
进行代码更改。例如,在文本编辑器中,打开
src/main/java/org/acme/quickstart/GreetingsResource.java文件。 更改"hello"端点,以返回 "Hello world" 并保存文件。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证 Quarkus 是否立即重新运行测试来测试更改的代码。
查看输出日志,以检查测试结果。在本例中,测试会检查更改的字符串是否包含 "Hello from Quarkus REST" 值。测试失败,因为字符串已更改为 "Hello world"。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要退出连续测试,请在键盘上按
Ctrl-C或q。
如果您将值重新更改为 "Hello from Quarkus REST",则测试会自动再次运行。
1.8.1. 控制连续测试的命令 复制链接链接已复制到粘贴板!
您可以使用键盘上的热键命令控制您的选项以进行持续测试。要查看完整的命令列表,请在键盘上按"h"可用的选项如下:
| 命令 | 描述 |
|---|---|
| r | 重新运行所有测试。 |
| f | 重新运行失败的所有测试。 |
| b | 切换"broken"模式。只有之前失败的测试才会运行,即使其他测试会受到您的代码更改的影响。如果您更改许多测试所使用的代码,但只想查看失败的测试,则此选项可能很有用。 |
| v | 打印输出详细描述了从上次测试运行到控制台的测试失败。如果上一次测试运行以来有相当多的控制台输出,此选项可能很有用。 |
| p | 临时暂停运行测试。如果您进行很多代码更改,这可能很有用,但在完成更改后不想获得测试反馈。 |
| q | 退出连续测试。 |
| o | 将测试输出打印到控制台。这默认是禁用的。禁用测试输出后,输出会被过滤并保存,但不会在控制台中显示。您可以查看 Dev UI 上的测试输出。 |
| i | 切换基于检测的重新加载。使用这个选项不会影响测试,但不允许进行实时重新加载。这可用于避免在更改不会影响类结构时重新启动。 |
| l | 切换实时重新加载。使用这个选项不会影响测试,但您可以打开和关闭实时重新载入。 |
| s | 强制重启。使用此选项,您可以强制扫描已更改的文件和包含更改的实时重新加载。请注意,即使没有代码更改,且禁用了 live reload,应用程序仍会重启。 |
1.9. 打包并运行红帽构建的 Quarkus 入门应用程序 复制链接链接已复制到粘贴板!
编译 Quarkus Getting Started 项目后,您可以将其打包在 JAR 文件中,并从命令行运行。
用于打包并运行 Quarkus 入门应用程序的命令取决于您在机器上安装的开发人员工具。
先决条件
- 您已编译了 Quarkus Getting Started 项目。
流程
-
前往
getting-started项目目录。 要打包 Quarkus Getting Started 项目,请使用以下方法之一,具体取决于您要使用的开发人员工具:
如果要使用 Apache Maven:
mvn package
mvn packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要使用 Quarkus CLI:
quarkus build
quarkus buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您希望使用 Maven 打包程序:
./mvnw package
./mvnw packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令在
/target目录中生成以下 JAR 文件:-
getting-started-1.0-0-SNAPSHOT.jar: 包含项目的类和资源。这是 Maven 构建生成的常规工件。 -
quarkus-app/quarkus-run.jar: Is an executable JAR 文件。此文件不是 uber-JAR 文件。依赖项复制到target/quarkus-app/lib目录中。
-
要启动应用程序,请输入以下命令:
java -jar target/quarkus-app/quarkus-run.jar
java -jar target/quarkus-app/quarkus-run.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意- 在运行应用程序前,请确保停止 dev 模式、(press CTRL+C),或者您将存在端口冲突。
-
quarkus-run.jar文件中的MANIFEST.MF文件的Class-Path条目会明确列出lib目录中的 JAR 文件。如果要从另一个位置部署应用程序,您必须部署整个quarkus-app目录。
各种红帽构建的 Quarkus 扩展贡献了非应用程序端点,它们提供有关应用程序的不同类型的信息。例如,quarkus-smallrye-health、quarkus-micrometer-registry-prometheus 和 quarkus-smallrye-openapi 扩展。
您可以通过指定 /q 前缀来访问这些非应用程序端点。例如: /q/health、/q/metrics、/q/openapi。
对于可能出现安全风险的非应用程序端点,您可以选择使用专用管理界面在不同的 TCP 端口下公开这些端点。如需更多信息,请参阅 Quarkus 管理界面参考指南。
1.10. JVM 和原生构建模式 复制链接链接已复制到粘贴板!
您可以编译经典 Java 虚拟机(JVM)应用程序,或使用 Mandrel 或 GraalVM 的原生 镜像工具编译原生 应用程序。
1.10.1. 将应用程序编译为典型的 JVM 应用 复制链接链接已复制到粘贴板!
您可以将应用程序编译为 JVM 应用。此选项基于 quarkus.package.jar.type 配置属性。将此属性设置为指定要生成的 JAR 文件格式:
-
fast-jar: 为 Quarkus 优化的 JAR 文件和默认配置选项。启动时间稍快,并且稍微降低内存用量。 -
legacy-jar: 典型的 JAR 文件。此文件已弃用,而不是首选选项。 -
mutable-jar: 用于原生镜像容器构建的 JAR 文件。 uber-jar: 单个独立 JAR 文件。这些文件在所有操作系统上工作,构建要快于原生映像。
1.10.2. 将应用程序编译到原生镜像中 复制链接链接已复制到粘贴板!
要构建原生镜像,请将 quarkus.native.enabled 设置为 true。
这样,您可以创建一个专门用于您选择的操作系统(如 Windows 的 .exe 文件)的可执行二进制文件。与 JAVA JAR 文件相比,这些文件的启动时间和较少的 RAM 消耗要快,但它们的编译需要几分钟。此外,使用原生二进制文件可以的最大吞吐量低于常规 JVM 应用,因为缺少 profile-guided 优化。
使用 Mandrel
Mandrel 是红帽构建的 Quarkus 的 GraalVM 专用发行版,也是构建目标 Linux 容器化环境的原生可执行文件的首选方法。虽然 Mandrel 方法非常适合在容器化环境中嵌入编译输出,但只会提供一个 Linux64 位原生可执行文件。因此,
.exe等结果不是一个选项。鼓励 Mandrel 用户使用容器来构建其原生可执行文件。
要使用官方 Mandrel 镜像,通过本地安装 Docker 或 Podman 将应用程序编译为原生模式,请输入具有以下属性的
mvn package命令:使用 Maven:
对于 Docker:
./mvnw package -Dnative -Dquarkus.native.enabled=true
./mvnw package -Dnative -Dquarkus.native.enabled=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow ./mvnw package -Dnative -Dquarkus.native.container-build=true
./mvnw package -Dnative -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow ./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1
./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Podman (可选):
红帽构建的 Quarkus 会自动检测容器运行时。但是,如果要强制使用特定的容器运行时,请手动指定一个。
./mvnw package -Dnative -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Dnative -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow ./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow ./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1 Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1 Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 步骤结果
这些命令在目标目录中创建一个
*-runner二进制文件,在其中应用以下内容:-
*-runner文件是 Quarkus 生成的构建原生二进制文件。 -
目标目录是构建 Maven 应用程序时 Maven 创建的目录。
-
使用 GraalVM
因为 Mandrel 不支持 macOS,所以您可以使用 Oracle GraalVM 在此操作系统上构建原生可执行文件。
您还可以通过直接在裸机 Linux 或 Windows 发行版上使用 Oracle GraalVM 来构建原生可执行文件。
有关如何使用 Oracle GraalVM 构建原生可执行文件的详情,请参考 将 Quarkus 应用程序的红帽构建的 Quarkus 应用程序编译到原生可执行文件。
1.11. 以原生模式打包并运行红帽构建的 Quarkus 入门应用程序 复制链接链接已复制到粘贴板!
在原生模式中,应用构建的输出是一个独立于平台的原生二进制文件,而不是压缩或归档 JAR 文件。有关原生模式与 Java 虚拟机(JVM)不同的更多信息,请参阅 JVM 和原生构建模式。
先决条件
-
已安装 OpenJDK 17 或 21,并设置
JAVA_HOME环境变量来指定 Java SDK 的位置。 - 已安装 Apache Maven 3.9.9。
- 您有一个正常工作的 C 开发环境。
- 您有可正常工作的容器运行时,如 Docker 或 Podman。
可选 :如果要使用 Quarkus 命令行界面(CLI),请确保已安装它。
- 有关如何安装 Quarkus CLI 的说明,请参阅 Quarkus CLI 中的特定于社区的信息。
- 您已克隆并编译了 Quarkus Getting Started 项目。
您已下载并安装了 GraalVM 的社区或企业版本。
- 要下载并安装社区或 GraalVM 的企业级版本,请参阅官方 使用 GraalVM 文档。
- 或者,使用特定于平台的安装工具,如 sdkman、homebrew 或 scoop。
虽然您可以使用 GraalVM 的社区版本完成 Getting Started 指南中的所有流程,但红帽构建的 Quarkus 生产环境中不支持 GraalVM 社区版本。如需更多信息,请参阅将 红帽构建的 Quarkus 应用程序编译到原生可执行文件。
流程
通过将
GRAALVM_HOME环境变量设置为 GraalVM 安装目录来配置运行时环境。例如:export GRAALVM_HOME=$HOME/Development/graalvm/
export GRAALVM_HOME=$HOME/Development/graalvm/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 macOS 中,将变量设置为
Home子目录:export GRAALVM_HOME=$HOME/Development/graalvm/Contents/Home/
export GRAALVM_HOME=$HOME/Development/graalvm/Contents/Home/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 Windows 服务器上,使用 Control Panel 设置环境变量。
安装
native-image工具:${GRAALVM_HOME}/bin/gu install native-image${GRAALVM_HOME}/bin/gu install native-imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
JAVA_HOME环境变量设置为 GraalVM 安装目录:export JAVA_HOME=${GRAALVM_HOME}export JAVA_HOME=${GRAALVM_HOME}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 GraalVM
bin目录添加到路径中:export PATH=${GRAALVM_HOME}/bin:$PATHexport PATH=${GRAALVM_HOME}/bin:$PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入 Getting Started 项目文件夹:
cd getting-started
cd getting-startedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法之一编译原生镜像:
使用 Maven:
mvn clean package -Pnative
mvn clean package -PnativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Quarkus CLI:
quarkus build --native
quarkus build --nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven 打包程序:
./mvnw clean package -Pnative
./mvnw clean package -PnativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
启动应用程序:
./target/getting-started-1.0.0-SNAPSHOT-runner
./target/getting-started-1.0.0-SNAPSHOT-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 观察日志消息,并验证它是否包含
原生一词:2024-09-25 08:35:51,505 INFO [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT native (powered by Quarkus 3.20.2.redhat-00004) started in 0.043s. Listening on: http://0.0.0.0:8080
2024-09-25 08:35:51,505 INFO [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT native (powered by Quarkus 3.20.2.redhat-00004) started in 0.043s. Listening on: http://0.0.0.0:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow