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:

      Copy to Clipboard Toggle word wrap
      ./mvnw package -Dnative -Dquarkus.native.enabled=true
      Copy to Clipboard Toggle word wrap
      ./mvnw package -Dnative -Dquarkus.native.container-build=true
      Copy to Clipboard Toggle word wrap
      ./mvnw package -Dnative -Dquarkus.native.builder-image=registry.access.redhat.com/quarkus/mandrel-for-jdk-21-rhel8:23.1
    • 对于 Podman (可选):

      红帽构建的 Quarkus 会自动检测容器运行时。但是,如果要强制使用特定的容器运行时,请手动指定一个。

      Copy to Clipboard Toggle word wrap
      ./mvnw package -Dnative -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
      Copy to Clipboard Toggle word wrap
      ./mvnw package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
      Copy to Clipboard Toggle word wrap
      ./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

      步骤结果

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

      • *-runner 文件是 Quarkus 生成的构建原生二进制文件。
      • 目标目录 是构建 Maven 应用程序时 Maven 创建的目录。
  • 使用 GraalVM

    因为 Mandrel 不支持 macOS,所以您可以使用 Oracle GraalVM 在此操作系统上构建原生可执行文件。

    您还可以通过直接在裸机 Linux 或 Windows 发行版上使用 Oracle GraalVM 来构建原生可执行文件。

    有关如何使用 Oracle GraalVM 构建原生可执行文件的详情,请参考 将 Quarkus 应用程序的红帽构建的 Quarkus 应用程序编译到原生可执行文件

其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.