1.10. JVM 和原生构建模式
下面的部分论述了编译经典 JVM 应用程序,并使用 Mandrel 或 GraalVM 的 native-image 工具编译原生应用程序。
1.10.1. 将应用程序编译为典型的 JVM 应用程序 复制链接链接已复制到粘贴板!
您可以将应用程序编译为 JVM 应用程序。这个选项基于 quarkus.package.type 配置属性,并生成以下文件之一:
-
fast-jar:针对 Quarkus 和默认配置选项优化的 JAR 文件。可以更快地启动时间,并稍微减少内存用量。 -
legacy-jar:典型的 JAR 文件。 uber-jar:单个独立 JAR 文件。这些 JAR 文件可用于所有操作系统,构建速度比原生镜像快。
1.10.2. 将应用程序编译到原生镜像中 复制链接链接已复制到粘贴板!
您可以将应用程序编译到原生镜像。为此,您可以将 quarkus.package.type 配置属性设置为 native。
使用此属性,您可以创建一个为您选择的操作系统(如 Windows 的 .exe 文件)编译的可执行二进制文件。这些文件的启动时间比 JAVA JAR 文件要快得多,但其编译需要几分钟时间。此外,使用原生二进制文件可达到的最大吞吐量比常规 JVM 应用低,因为缺少配置文件指南的优化。
使用 Mandrel
Mandrel 是 GraalVM for Red Hat build of Quarkus 的专用发行版,也是构建针对 Linux 容器化环境的原生可执行文件的建议方法。虽然 Mandrel 方法非常适合将编译输出嵌入到容器化环境中,但只提供了 Linux64 位原生可执行文件。因此,
.exe等结果不是选项。我们鼓励 Mandrel 用户使用容器来构建其原生可执行文件。
要使用官方 Mandrel 镜像使用本地 Docker 或 Podman 安装将应用程序编译到原生模式,请输入具有以下属性的
mvn package命令:-Dquarkus.package.type=native -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel:{MandrelVersion}-{JDK-ver-other}-Dquarkus.package.type=native -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel:{MandrelVersion}-{JDK-ver-other}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 有关如何使用 Mandrel 构建原生可执行文件的详情,请参考 将红帽构建的 Quarkus 应用程序编译到原生可执行文件
- 有关可用 Mandrel 镜像的列表,请参阅 可用的 Mandrel 镜像
使用 GraalVM
因为 Mandrel 不支持 macOS,所以您可以使用 Oracle GraalVM 在此操作系统上构建原生可执行文件。
您还可以在裸机 Linux 或 Windows 发行版上直接使用 Oracle GraalVM 来构建原生可执行文件。有关此过程的更多信息,请参阅 Oracle GraalVM README 和发行注记。
有关如何使用 Oracle GraalVM 构建原生可执行文件的详情,请参考 将红帽构建的 Quarkus 应用程序编译到原生可执行文件。