1.2. 生成原生可执行文件
原生二进制文件是创建在特定操作系统和 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 等工具的开发人员。总体而言,它比容器内构建方法要快。 |
要构建原生 Linux 可执行文件,红帽构建的 Quarkus 支持使用 Red Hat Build of Quarkus Native builder image (quarkus/mandrel-for-jdk-21-21-rhel8),它基于 GraalVM Mandrel。
虽然 Quarkus 社区中提供了其他镜像,但该产品不支持它们。仅对需要红帽支持的生产环境构建使用支持的镜像。
- 其源基于 17 (没有 Java 18 - 21 功能)编写的应用程序仍然可使用基于 Java 21 的 Mandrel 23.1 基础镜像编译该应用程序的原生可执行文件。
- 红帽构建的 Quarkus 不支持使用 Oracle GraalVM 社区版本(CE)、Mandrel 社区版本或任何其他 GraalVM 发行版构建原生可执行文件。如需更多信息,请参阅将 红帽构建的 Quarkus 应用程序编译到原生可执行文件。
1.2.1. 使用容器内构建生成原生可执行文件 复制链接链接已复制到粘贴板!
要创建原生可执行文件并运行原生镜像测试,请使用由红帽构建的 Quarkus 为容器内构建提供 的原生 配置集。
先决条件
- podman 或 Docker 已安装。
- 容器有权访问至少 8GB 内存。
- 可选: 已安装 Quarkus CLI,这是可用于构建原生可执行文件的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。
流程
打开 Getting Started 项目
pom.xml文件,并验证项目是否包含原生配置集:<profiles> <profile> <id>native</id> <activation> <property> <name>native</name> </property> </activation> <properties> <skipITs>false</skipITs> <quarkus.native.enabled>true</quarkus.native.enabled> </properties> </profile> </profiles>使用以下方法之一构建原生可执行文件:
使用 Maven:
对于 Docker:
./mvnw package -Dnative -Dquarkus.native.container-build=true对于 Podman:
./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
使用 Quarkus CLI:
对于 Docker:
quarkus build --native -Dquarkus.native.container-build=true对于 Podman:
quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman步骤结果
这些命令在目标目录中创建一个
*-runner二进制文件,在其中应用以下内容:-
*-runner文件是 Quarkus 生成的构建原生二进制文件。 目标目录是构建 Maven 应用程序时 Maven 创建的目录。重要将 Quarkus 应用程序编译到原生可执行文件,在分析和优化过程中消耗大量内存。您可以通过设置
quarkus.native.native-image-xmx配置属性来限制原生编译过程中使用的内存量。设置较低的内存限值可能会增加构建时间。
要运行原生可执行文件,请输入以下命令:
./target/*-runner
其他资源