第 1 章 将红帽构建的 Quarkus 应用程序编译到原生可执行文件


作为应用程序开发人员,您可以使用红帽构建的 Quarkus 3.8 创建在 OpenShift Container Platform 和无服务器环境中运行的 Java 编写的微服务。Quarkus 应用程序可以作为常规 Java 应用程序(在 Java 虚拟机之上)运行,或者编译到原生可执行文件中。编译到原生可执行文件的应用程序具有比 Java 对应部分小的内存占用和更快的启动时间。

本指南介绍了如何将红帽构建的 Quarkus 3.8 Getting Started 项目编译到原生可执行文件中,以及如何配置和测试原生可执行文件。您需要之前在 Getting started with Red Hat build of Quarkus 中创建的应用程序。

使用 Red Hat build of Quarkus 构建原生可执行文件涵盖了:

  • 使用 Podman 或 Docker 等容器运行时(如 Podman 或 Docker)通过单个命令构建原生可执行文件
  • 使用生成的原生可执行文件创建自定义容器镜像
  • 使用 OpenShift Container Platform Docker 构建策略创建容器镜像
  • 将 Quarkus 原生应用程序部署到 OpenShift Container Platform
  • 配置原生可执行文件
  • 测试原生可执行文件

先决条件

  • 设置 JAVA_HOME 环境变量,以指定 Java SDK 的位置。

    • 登录到红帽客户门户网站,从 Software Downloads 页面下载红帽构建的 OpenJDK。
  • 一个兼容开放容器项目(OCI)的容器运行时,如 Podman 或 Docker。
  • 已完成的 Quarkus 入门项目。

1.1. 生成原生可执行文件

原生二进制文件是创建在特定操作系统和 CPU 架构上运行的可执行文件。

以下列表概述了原生可执行文件的一些示例:

  • Linux AMD 64 位的 ELF 二进制文件
  • Windows AMD 64 位的 EXE 二进制文件
  • ARM 64 位的 ELF 二进制文件
注意

红帽构建的 Quarkus 仅支持 Linux AMD 64 位的 ELF 二进制文件。

构建原生可执行文件时,您的应用程序和依赖项(包括 JVM)被打包到一个文件中。应用程序的原生可执行文件包含以下项目:

  • 编译的应用程序代码
  • 所需的 Java 库
  • 减少了虚拟机(VM)的版本,用于改进应用程序启动时间和最小磁盘和内存占用量,这也是为应用程序代码及其依赖项量身定制的

要从 Quarkus 应用生成原生可执行文件,您可以选择容器内构建或 local-host 构建。下表解释您可以使用的不同构建选项:

Expand
表 1.1. 构建生成原生可执行文件的选项
构建选项Requires使用结果优点

in-container build - Supported

容器运行时,如 Podman 或 Docker

默认 registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1 构建器镜像

使用主机的 CPU 架构进行 Linux 64 位可执行文件

GraalVM 不需要在本地设置,从而使 CI 管道 更有效地运行

local-host build - 仅支持上游

GraalVM 或 Mandrel 的本地安装

其本地安装作为 quarkus.native.builder-image 属性的默认设置

具有与执行构建的机器相同的操作系统和 CPU 架构的可执行文件

不允许或不想使用 Docker 或 Podman 等工具的开发人员的替代方案。总体而言,它比容器内构建方法更快。

重要
  • 红帽构建的 Quarkus 3.8 仅支持使用基于 Java 21 的 红帽构建的 Quarkus 原生构建器镜像构建原生 Linux 可执行文件,这是 Mandrel 的一个产品化发行版本。虽然其他镜像在社区中可用,但产品不支持它们,因此您不应该将其用于您希望红帽提供支持的生产构建。
  • 其源基于 17 (不使用 Java 18 - 21 的功能)编写的应用程序仍然可以使用基于 Java 21 的 Mandrel 23.1 基础镜像编译应用程序的原生可执行文件。
  • 使用红帽构建的 Quarkus 不支持使用 Oracle GraalVM 社区版(CE)、Mael 社区版本或任何其他 GraalVM 发行版构建原生可执行文件。

要创建原生可执行文件并运行原生镜像测试,请使用由红帽构建的 Quarkus 提供的 原生 配置集进行容器内构建。

先决条件

  • podman 或 Docker 已安装。
  • 容器可以访问至少 8GB 内存。

流程

  1. 打开 Getting Started project pom.xml 文件,并验证项目是否包含 native 配置集:

    <profiles>
      <profile>
        <id>native</id>
        <activation>
          <property>
            <name>native</name>
          </property>
        </activation>
        <properties>
          <skipITs>false</skipITs>
          <quarkus.package.type>native</quarkus.package.type>
        </properties>
      </profile>
    </profiles>
    Copy to Clipboard Toggle word wrap
  2. 使用以下方法之一构建原生可执行文件:

    • 使用 Maven:

      • 对于 Docker:

        ./mvnw package -Dnative -Dquarkus.native.container-build=true
        Copy to Clipboard Toggle word wrap
      • 对于 Podman:

        ./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
        Copy to Clipboard Toggle word wrap
    • 使用 Quarkus CLI:

      • 对于 Docker:

        quarkus build --native -Dquarkus.native.container-build=true
        Copy to Clipboard Toggle word wrap
      • 对于 Podman:

        quarkus build --native -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
        Copy to Clipboard Toggle word wrap

        步骤结果

        这些命令在目标目录中创建一个 *-runner 二进制文件,其中适用以下内容:

      • *-runner 文件是由 Quarkus 生成的构建原生二进制文件。
      • 目标目录 是一个目录,Maven 会在构建 Maven 应用程序时创建该目录。

        重要

        将 Quarkus 应用程序编译到原生可执行文件会在分析和优化过程中消耗大量内存。您可以通过设置 quarkus.native.native-image-xmx 配置属性来限制原生编译过程中使用的内存量。设置低内存限值可能会增加构建时间。

  3. 要运行原生可执行文件,请输入以下命令:

    ./target/*-runner
    Copy to Clipboard Toggle word wrap

1.1.2. 使用 local-host 构建生成原生可执行文件

如果您不使用 Docker 或 Podman,请使用 Quarkus local-host build 选项来创建和运行原生可执行文件。

使用本地主机构建方法比使用容器更快,并适用于使用 Linux 操作系统的机器。

重要

红帽构建的 Quarkus 不支持在生产环境中使用以下步骤。只有在 Docker 或 Podman 不可用时,才使用这个方法测试或作为备份方法。

先决条件

  • Mandrel 或 GraalVm 的本地安装,根据 构建原生可执行文件 指南进行了正确配置。

    • 另外,对于 GraalVM 安装,还必须安装 native-image

流程

  1. 对于 GraalVM 或 Mandrel,使用以下方法之一构建原生可执行文件:

    • 使用 Maven:

      ./mvnw package -Dnative
      Copy to Clipboard Toggle word wrap
    • 使用 Quarkus CLI:

      quarkus build --native
      Copy to Clipboard Toggle word wrap

      步骤结果

      这些命令在目标目录中创建一个 *-runner 二进制文件,其中适用以下内容:

      • *-runner 文件是 Quarkus 生成的内置原生二进制文件。
      • 目标目录 是一个目录,Maven 会在构建 Maven 应用程序时创建该目录。

        注意

        构建原生可执行文件时,会启用 prod 配置集,除非在 quarkus.profile 属性中修改了。

  2. 运行原生可执行文件:

    ./target/*-runner
    Copy to Clipboard Toggle word wrap

其他资源

如需更多信息,请参阅 Quarkus "Building a native executable" 指南中的 Producing a native executable 部分。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat