第 1 章 将红帽构建的 Quarkus 应用程序编译到原生可执行文件
作为应用程序开发人员,您可以使用红帽构建的 Quarkus 3.15 来创建在 OpenShift Container Platform 和无服务器环境中运行的 Java 编写的微服务。Quarkus 应用程序可以作为常规 Java 应用程序(在 Java 虚拟机(JVM)的顶部)运行,或者编译成原生可执行文件。编译到原生可执行文件的应用程序具有比其 Java 对应部分小的内存占用速度和更快的启动时间。
本指南介绍了如何将 Quarkus 3.15 Getting Started 项目编译到原生可执行文件中,以及如何配置和测试原生可执行文件。您需要之前在 Getting started with Red Hat build of Quarkus 中创建的应用程序。
使用红帽构建的 Quarkus 构建原生可执行文件包括:
- 使用容器运行时(如 Podman 或 Docker)通过单个命令构建原生可执行文件
- 使用生成的原生可执行文件创建自定义容器镜像
- 使用 OpenShift Container Platform Docker 构建策略创建容器镜像
- 将 Quarkus 原生应用程序部署到 OpenShift Container Platform
- 配置原生可执行文件
- 测试原生可执行文件
先决条件
将
JAVA_HOME环境变量设置为指定 Java SDK 的位置。- 登录到红帽客户门户网站,从 Software Downloads 页面下载红帽构建的 OpenJDK。
- 兼容开放容器项目(OCI)的容器运行时,如 Podman 或 Docker。
已完成的 Quarkus Getting Started 项目。
- 要了解如何构建 Quarkus Getting Started 项目,请参阅 Red Hat build of Quarkus。
-
或者,您可以下载 Quarkus Quickstarts 归档或克隆 Quarkus Quickstarts Git 存储库。示例项目位于 get
-started目录中。
1.1. 生成原生可执行文件 复制链接链接已复制到粘贴板!
原生二进制文件是创建在特定操作系统和 CPU 架构中运行的可执行文件。
以下列表概述了原生可执行文件的一些示例:
- Linux AMD 64 位的 ELF 二进制文件
- Windows AMD 64 位的 EXE 二进制文件
- ARM 64 位的 ELF 二进制文件
红帽构建的 Quarkus 中只支持 Linux x86-64 或 AArch64 位的 ELF 二进制文件。
构建原生可执行文件的一个优点是您的应用程序和依赖项(包括 Java 虚拟机(JVM))被打包到单个文件中。应用程序的原生可执行文件包含以下项目:
- 编译的应用程序代码
- 所需的 Java 库
- 用于改进应用程序启动时间和最小磁盘和内存占用量的虚拟机版本(VM)减少,它也是为应用程序代码及其依赖项量身定制的。
要从 Quarkus 应用程序生成原生可执行文件,您可以选择 in-container 构建或 local-host 构建。下表解释了您可以使用的不同构建选项:
| 构建选项 | Requires | 使用 | 结果 | 优点 |
|---|---|---|---|---|
| in-container build - Supported | 容器运行时,如 Podman 或 Docker |
默认 | 使用主机的 CPU 构架的 Linux 64 位可执行文件 | GraalVM 不需要在本地设置,这使得 CI 管道 可以更有效地运行 |
| local-host build - 仅支持上游 | 本地安装 GraalVM 或 Mandrel |
其本地安装作为 | 具有与执行构建的机器相同的操作系统和 CPU 架构的可执行文件 | 不允许或不希望使用 Docker 或 Podman 等工具的开发人员。总体而言,它比容器内构建方法要快。 |
-
红帽构建的 Quarkus 3.15 仅支持使用基于 Java 21 的 Red Hat build of Quarkus Native Builder image (
quarkus/mandrel-for-jdk-21-rhel8) 构建原生 Linux 可执行文件,这是 GraalVM Mandrel 的产品的发布。虽然 Quarkus 社区中提供了其他镜像,但它们在产品中不被支持,因此不要将它们用于您希望红帽支持的生产环境构建。 - 其源基于 17 (没有 Java 18 - 21 功能)编写的应用程序仍然可使用基于 Java 21 的 Mandrel 23.1 基础镜像编译该应用程序的原生可执行文件。
- 红帽构建的 Quarkus 不支持使用 Oracle GraalVM 社区版本(CE)、Mandrel 社区版本或任何其他 GraalVM 发行版构建原生可执行文件。如需更多信息,请参阅将 红帽构建的 Quarkus 应用程序编译到原生可执行文件。
1.1.1. 使用容器内构建生成原生可执行文件 复制链接链接已复制到粘贴板!
要创建原生可执行文件并运行原生镜像测试,请使用由红帽构建的 Quarkus 为容器内构建提供 的原生 配置集。
先决条件
- podman 或 Docker 已安装。
- 容器有权访问至少 8GB 内存。
- 可选: 已安装 Quarkus CLI,这是可用于构建原生可执行文件的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
流程
打开 Getting Started 项目
pom.xml文件,并验证项目是否包含原生配置集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法之一构建原生可执行文件:
使用 Maven:
对于 Docker:
./mvnw package -Dnative -Dquarkus.native.container-build=true
./mvnw package -Dnative -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Podman:
./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
使用 Quarkus CLI:
对于 Docker:
quarkus build --native -Dquarkus.native.container-build=true
quarkus build --native -Dquarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Podman:
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 步骤结果
这些命令在目标目录中创建一个
*-runner二进制文件,在其中应用以下内容:-
*-runner文件是 Quarkus 生成的构建原生二进制文件。 目标目录是构建 Maven 应用程序时 Maven 创建的目录。重要将 Quarkus 应用程序编译到原生可执行文件,在分析和优化过程中消耗大量内存。您可以通过设置
quarkus.native.native-image-xmx配置属性来限制原生编译过程中使用的内存量。设置较低的内存限值可能会增加构建时间。
要运行原生可执行文件,请输入以下命令:
./target/*-runner
./target/*-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
1.1.2. 使用本地主机构建生成原生可执行文件 复制链接链接已复制到粘贴板!
如果您不使用 Docker 或 Podman,请使用 Quarkus local-host build 选项创建并运行原生可执行文件。
使用本地主机构建方法比使用容器快,适用于使用 Linux 操作系统的机器。
红帽构建的 Quarkus 不支持在生产环境中使用以下步骤。只有在 Docker 或 Podman 不可用时,仅当测试或作为备份方法时使用此方法。
先决条件
Mandrel 或 GraalVm 的本地安装根据 Quarkus 构建原生可执行文件 指南正确配置。
-
另外,对于 GraalVM 安装,还必须安装
native-image。
-
另外,对于 GraalVM 安装,还必须安装
- 可选: 已安装 Quarkus CLI,这是可用于构建原生可执行文件的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
流程
对于 GraalVM 或 Mandrel,使用以下方法之一构建原生可执行文件:
使用 Maven:
./mvnw package -Dnative
./mvnw package -DnativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Quarkus CLI:
quarkus build --native
quarkus build --nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 步骤结果
这些命令在目标目录中创建一个
*-runner二进制文件,在其中应用以下内容:-
*-runner文件是 Quarkus 生成的构建原生二进制文件。 目标目录是构建 Maven 应用程序时 Maven 创建的目录。注意构建原生可执行文件时,会启用
prod配置集,除非在quarkus.profile属性中被修改。
-
运行原生可执行文件:
./target/*-runner
./target/*-runnerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
如需更多信息,请参阅 Quarkus "Building a native executable" 指南中的 Producing a native executable 部分。