使用 Apache Maven 开发并编译 Quarkus 应用程序
第 1 章 使用 Apache Maven 开发并编译 Quarkus 应用程序 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用 Red Hat build of Quarkus 创建使用 Java 编写的基于微服务的应用程序,这些应用程序在 OpenShift Container Platform 和无服务器环境中运行。编译到原生可执行文件的应用程序具有较少的内存占用率和快速启动时间。
使用 Quarkus Apache Maven 插件创建红帽构建的 Quarkus 项目。
如果适用,提供了使用 Quarkus 命令行界面(CLI)的替代说明。Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
先决条件
已安装 OpenJDK 11 或 17。
- 要下载 Red Hat OpenJDK,请登录到红帽客户门户网站,进入 Software Downloads。
-
您已设置了
JAVA_HOME环境变量,以指定 Java SDK 的位置。 已安装 Apache Maven 3.8.x,其中 x 是 6 或更高版本。
- 要下载 Maven,请转至 Apache Maven 项目网站。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
1.1. 关于红帽构建的 Quarkus 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 是一个 Kubernetes 原生 Java 堆栈,用于容器和 Red Hat OpenShift Container Platform。Quarkus 设计为使用流行的 Java 标准、框架和库,如 Eclipse MicroProfile、Eclipse Vert.x、Apache Camel、Apache Kafka、Hibernate ORM 与 Java Persistence API (EJB)和 RESTEasy (JAX-RS)等。
作为开发人员,您可以选择 Java 应用所需的 Java 框架,您可以在 Java 虚拟机(JVM)模式下运行,或者以原生模式运行。Quarkus 提供了构建 Java 应用程序的容器优先方法。容器先行方法促进微服务和功能的容器化和高效执行。因此,Quarkus 应用程序具有较小的内存空间和更快的启动时间。
Quarkus 还通过统一配置、自动配置未配置的服务、实时编码和持续测试等功能优化应用程序开发流程,为您提供对代码更改的即时反馈。
有关 Quarkus 社区版本和红帽构建的 Quarkus 之间的差异的详情,请参考 Quarkus 社区版本和红帽构建的 Quarkus 之间的 Differences。
1.2. 关于 Apache Maven 和 Quarkus 复制链接链接已复制到粘贴板!
Apache Maven 是一个分布式构建自动化工具,用于 Java 应用程序开发,用于创建、管理和构建软件项目。Maven 使用名为 Project Object Model(POM)文件的标准配置文件来定义项目并管理构建流程。POM 文件描述了模块和组件依赖项,使用 XML 文件描述生成的项目打包和输出的构建顺序和目标,确保项目被正确构建并统一。
Maven 存储库
Maven 存储库存储 Java 库、插件和其他构建构件。默认公共存储库是 Maven 2 Central Repository,但存储库可以是私有和内部的,以在开发团队之间共享通用工件。也可从第三方提供存储库。
您可以将 Red Hat-hosted Maven 存储库与 Quarkus 项目一起使用,也可以下载红帽构建的 Quarkus Maven 存储库。
Maven 插件
Maven 插件是 POM 文件的定义部分,用于运行一个或多个任务。红帽构建的 Quarkus 应用程序使用以下 Maven 插件:
-
Quarkus Maven 插件(
quarkus-maven-plugin) :启用 Maven 来创建 Quarkus 项目,将应用程序打包到 JAR 文件中,并提供开发模式。 -
Maven Surefire 插件(
maven-surefire-plugin): 当 Quarkus 启用测试配置集时,会在构建生命周期的测试阶段使用 Maven Surefire 插件在应用程序上执行单元测试。该插件生成包含测试报告的文本和 XML 文件。
1.2.1. 为在线存储库配置 Maven settings.xml 文件 复制链接链接已复制到粘贴板!
要将 Red Hat-hosted Quarkus 存储库与您的 Quarkus Maven 项目搭配使用,请为您的用户配置 settings.xml 文件。与存储库管理器或共享服务器上的存储库一起使用的 Maven 设置可以提供更好的项目控制和易管理性。
当您修改 Maven settings.xml 文件来配置存储库时,这些更改将应用到所有 Maven 项目。如果只想将配置应用到特定的项目,请使用 -s 选项并指定特定于项目的 settings.xml 文件的路径。
流程
在文本编辑器中或集成开发环境(IDE)中打开 Maven
$HOME/.m2/settings.xml文件。注意如果
$HOME/.m2/目录中没有settings.xml文件,请将settings.xml文件从$MAVEN_HOME/.m2/conf/目录中复制到$HOME/.m2/目录中。在
settings.xml文件的<profiles> 元素中添加以下行:<!-- Configure the Quarkus Maven repository --> <profile> <id>red-hat-enterprise-maven-repository</id> <repositories> <repository> <id>red-hat-enterprise-maven-repository</id> <url>https://maven.repository.redhat.com/ga/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>red-hat-enterprise-maven-repository</id> <url>https://maven.repository.redhat.com/ga/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>在
settings.xml文件的 <activeProfiles> 元素中添加以下行并保存文件。<activeProfile>red-hat-enterprise-maven-repository</activeProfile>
1.2.2. 配置 Quarkus Maven 存储库 复制链接链接已复制到粘贴板!
如果您不想使用在线 Maven 存储库,您可以下载并配置 Quarkus Maven 存储库,以使用 Maven 创建 Quarkus 应用程序。Quarkus Maven 存储库包含多个依赖项,Java 开发人员通常用来构建应用程序。此流程演示了如何编辑 settings.xml 文件来配置 Quarkus Maven 存储库。
当您修改 Maven settings.xml 文件来配置存储库时,更改将应用到所有 Maven 项目。如果要将配置应用到特定的项目,请使用 -s 选项并指定特定于项目的 settings.xml 文件的路径。
流程
- 登录到红帽客户门户网站,进入 Software Downloads,再下载 Quarkus Maven 存储库 ZIP 文件。
- 提取下载的存档。
-
进入
$HOME/.m2/目录,并在文本编辑器中打开 Mavensettings.xml文件,或一个集成的开发环境(IDE)。 将您下载的 Quarkus Maven 存储库路径添加到
settings.xml文件的<profiles> 元素中。Quarkus Maven 存储库的路径的格式必须是file://$PATH,例如file:///home/userX/<root-directory-of-the-downloaded-archive>/maven-repository。<!-- Configure the Quarkus Maven repository --> <profile> <id>red-hat-enterprise-maven-repository</id> <repositories> <repository> <id>red-hat-enterprise-maven-repository</id> <url>file:///path/to/Quarkus/Maven/repository/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>red-hat-enterprise-maven-repository</id> <url>file:///path/to/Quarkus/Maven/repository/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>在
settings.xml文件的 <activeProfiles> 元素中添加以下行并保存文件。<activeProfile>red-hat-enterprise-maven-repository</activeProfile>
如果您的 Maven 存储库包含过时的工件,则构建或部署项目时可能会遇到以下 Maven 错误消息之一:
-
缺少工件 <project_name> -
[ERROR] Failed to execute goal on project <artifact_name>; Could not resolve dependencies for <project_name>
其中:
-
<artifact_name> 是缺少工件的名称 -
<project_name> 是您要构建的项目的名称
要解决这个问题,请通过删除本地仓库的缓存版本(位于 $HOME/.m2/repository 目录中)来强制下载最新的 Maven 工件。
1.3. 在命令行中创建 Quarkus 项目 复制链接链接已复制到粘贴板!
在命令行中使用 Red Hat build of Quarkus Maven 插件创建一个 Quarkus 项目,方法是在命令行上提供属性和值,或者在交互模式中使用插件。您还可以使用 Quarkus 命令行界面(CLI)创建 Quarkus 项目。生成的项目包括以下元素:
- Maven 结构
- 关联的单元测试
-
启动应用程序后,可在
http://localhost:8080上访问的登录页面 -
src/main/docker中的 JVM 和原生模式的Dockerfile文件示例 - 应用程序配置文件
先决条件
已安装 OpenJDK 11 或 17。
- 要下载 Red Hat OpenJDK,请登录到红帽客户门户网站,进入 Software Downloads。
-
您已设置了
JAVA_HOME环境变量,以指定 Java SDK 的位置。 已安装 Apache Maven 3.8.x,其中 x 是 6 或更高版本。
- 要下载 Maven,请转至 Apache Maven 项目网站。
- 已安装 Quarkus 命令行界面(CLI),这是可用于创建 Quarkus 项目的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
在命令终端中,输入以下命令验证 Maven 是否使用 OpenJDK 11 或 17,以及 Maven 版本是否为 3.8.x,其中 x 是 6 或更高版本:
mvn --version- 如果前面的命令没有返回 OpenJDK 11 或 17,请将到 OpenJDK 11 或 17 的路径添加到 PATH 环境变量中,然后再次输入前面的命令。
要使用 Quarkus Maven 插件创建项目,请使用以下方法之一:
输入以下命令:
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.9.SP2-redhat-00003:create \ -DprojectGroupId=<project_group_id> \ -DprojectArtifactId=<project_artifact_id> \ -DplatformGroupId=com.redhat.quarkus.platform \ -DplatformArtifactId=quarkus-bom \ -DplatformVersion=2.13.9.SP2-redhat-00003在这个命令中,替换以下值:
-
<project_group_id> : 项目的唯一标识符 -
<project_artifact_id> : 项目名称和项目目录的名称
-
以互动模式创建项目:
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.9.SP2-redhat-00003:create出现提示时,输入所需的属性值。
注意您还可以输入以下命令使用项目属性的默认值创建项目:
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.9.SP2-redhat-00003:create -B使用 Quarkus CLI 创建项目:
quarkus create app my-groupId:my-artifactId您还可以通过以下方式获取可用选项列表:
quarkus create app --help
下表列出了您可以使用 create 命令定义的属性:
| 属性 | 默认值 | 描述 |
|---|---|---|
|
|
| 项目的唯一标识符。 |
|
|
|
项目和项目目录的名称。如果没有指定 |
|
|
| 项目的版本。 |
|
|
|
您的平台组 ID。所有现有的平台都由 |
|
|
| 平台 BOM 的工件 ID。 |
|
|
最新的平台版本,如 | 您要用于项目的平台版本。当您提供版本范围时,Maven 插件使用最新版本。 |
|
| [] | 要添加到项目的扩展列表,用逗号分开。 |
默认情况下,Quarkus Maven 插件使用最新的 quarkus-bom 文件。quarkus-bom 文件聚合扩展,以便您可以从应用程序中引用它们以匹配依赖项版本。当您离线时,Quarkus Maven 插件使用 quarkus-bom 文件的最新本地可用版本。如果 Maven 找到 quarkus-bom 版本 2.0 或更早版本,它将使用基于 quarkus-bom 的平台。
1.4. 通过配置 pom.xml 文件来创建 Quarkus 项目 复制链接链接已复制到粘贴板!
您可以通过配置 Maven POM XML 文件来创建 Quarkus 项目。
流程
-
在文本编辑器中打开
pom.xml文件。 添加包含以下项目的配置属性:
- Quarkus Maven 插件版本
-
Quarkus BOM
groupID,artifactID, 和version - Maven Surefire 插件版本
<properties> <quarkus.platform.version>2.13.9.SP2-redhat-00003</quarkus.platform.version> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.group-id>com.redhat.quarkus.platform</quarkus.platform.group-id> <surefire-plugin.version>3.0.0-M5</surefire-plugin.version> </properties>添加 Quarkus GAV (组、工件、版本),并使用
quarkus-bom文件省略不同 Quarkus 依赖项的版本:<dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>添加 Quarkus Maven 插件:
<build> <plugins> <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire-plugin.version}</version> <configuration> <systemPropertyVariables> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </plugin> </plugins> </build>注意maven-surefire-plugin运行应用程序的单元测试。可选: 要构建原生应用程序,请添加包括
Maven Failsafe 插件的特定原生配置集:<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemProperties> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> </systemProperties> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>-
在其名称中包含
IT的测试,并包含@NativeImageTest注释,则针对原生可执行文件运行。 - 有关原生模式与 JVM 模式的详情,请参阅 Quarkus "Getting Started" 指南中的 Difference between JVM 和 native mode。
-
在其名称中包含
1.5. 使用 code.quarkus.redhat.com 创建 Getting Started 项目 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用 code.quarkus.redhat.com 生成 Quarkus Maven 项目,并自动添加并配置要在应用程序中使用的扩展。另外,code.quarkus.redhat.com 会自动管理将项目编译为原生可执行文件所需的配置参数。
您可以生成 Quarkus Maven 项目,包括以下活动:
- 指定应用程序的基本详情
- 选择您要包含在项目中的扩展
- 使用项目文件生成可下载归档
- 使用自定义命令编译和启动应用程序
先决条件
- 您有一个 Web 浏览器。
- 您已准备了环境以使用 Apache Maven,如 所述
您已配置了 Quarkus Maven 存储库。您可以使用 Red Hat-hosted Quarkus 存储库,也可以下载并配置 Quarkus Maven 存储库,以使用 Maven 创建 Quarkus 应用程序。
- 要使用 Red Hat-hosted Quarkus 存储库,请参阅为在线存储库配置 Maven settings.xml 文件。
- 要将 Quarkus Maven 存储库配置为创建带有 Maven 的 Quarkus 应用程序,请参阅配置 Quarkus Maven 存储库。
- 可选 : 已安装 Quarkus 命令行界面(CLI),这是您可以在开发模式下启动 Quarkus 的方法之一。
如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
- 在 Web 浏览器中,导航到 https://code.quarkus.redhat.com。
指定项目的基本详情:
-
输入项目的组名称。name 格式遵循 Java 软件包命名规则,例如
org.acme。 -
输入您要用于从项目生成的 Maven 工件的名称,如
code-with-quarkus。 选择您要用来编译和启动应用程序的构建工具。您选择的构建工具决定了以下设置:
- 生成的项目的目录结构
- 您生成的项目中使用的配置文件格式
在生成项目后,会显示用于编译和启动 code.quarkus.redhat.com 的自定义构建脚本和命令。
注意红帽仅支持使用 code.quarkus.redhat.com 创建 Quarkus Maven 项目。
-
输入项目的组名称。name 格式遵循 Java 软件包命名规则,例如
指定应用程序项目的更多详情:
- 要显示包含更多应用程序详情的字段,请选择 More options。
-
输入您要用于从项目生成的工件的版本。此字段的默认值为
1.0.0-SNAPSHOT。建议使用 语义版本 ;但是,您可以选择指定不同类型的版本控制。 选择是否希望 code.quarkus.redhat.com 将初学者代码添加到项目中。当您添加标记为"CODE"到项目的扩展时,您可以在生成项目时自动为这些扩展创建示例类和资源文件。但是,如果您没有添加提供示例代码的任何扩展,这个选项不会影响生成的项目。
注意code.quarkus.redhat.com 存储库自动使用最新版本的 Red Hat build of Quarkus。您可以在生成项目后手动更改
pom.xml文件中的 BOM 版本。选择要使用的扩展。您选择的扩展作为 Quarkus 应用程序的依赖项包含在内。Quarkus 平台还确保这些扩展与将来的版本兼容。
重要不要在同一项目中使用
主动扩展。RESTEasy和 RESTEasy扩展旁边的 quark 图标(
)表示扩展是 Red Hat build of Quarkus 平台发行版本的一部分。红帽建议您使用同一平台中的扩展,因为它们被测试和验证在一起,因此更易于使用和升级。
您可以启用选项,为标记为 STARTER-CODE 的扩展自动生成初学程序代码。
要确认您的选择,请选择 Generate your application。此时会显示以下项目:
- 下载包含您生成的项目的存档的链接
- 可用于编译和启动应用程序的自定义命令
- 要将带有生成的项目文件的存档保存到机器中,请选择 Download the ZIP。
- 提取存档的内容。
进入包含您提取的项目文件的目录:
cd <directory_name>要以开发模式编译并启动应用程序,请使用以下方法之一:
使用 Maven:
./mvnw quarkus:dev使用 Quarkus CLI:
quarkus dev
其他资源
1.6. 配置 Java 编译器 复制链接链接已复制到粘贴板!
默认情况下,Quarkus Maven 插件将编译器标志传递给来自 maven-compiler-plugin 的 javac 命令。
流程
要自定义开发模式中使用的编译器标志,请将配置部分添加到
插件块中,并设置编译器Args属性。您还可以设置源、目标和jvmArgs。例如,要将-verbose传给 JVM 和javac命令,请添加以下配置:<plugin> <groupId>com.redhat.quarkus.platform</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <compilerArgs> <arg>-verbose</arg> </compilerArgs> <jvmArgs>-verbose</jvmArgs> </configuration> ... </plugin>
1.7. 安装和管理 Java 扩展 复制链接链接已复制到粘贴板!
您可以使用 Java 扩展来扩展应用程序的功能,并将框架配置、引导并将框架集成到应用程序中。此流程演示了如何查找并添加 Quarkus 项目的扩展。
先决条件
- 您已创建了 Quarkus Maven 项目。
- 已安装 Quarkus 命令行界面(CLI),这是可用于管理 Quarkus 扩展的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
- 进入您的 Quarkus 项目目录。
使用以下方法之一列出所有可用扩展:
使用 Maven:
./mvnw quarkus:list-extensions使用 Quarkus CLI:
quarkus extension --installable
使用以下方法之一为项目添加扩展:
使用 Maven,输入以下命令,其中
<extension>是您要添加的扩展的组、工件、版本(GAV):./mvnw quarkus:add-extension -Dextensions="<extension>"例如,要添加 Agroal 扩展,请输入以下命令:
./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-agroal"使用 Quarkus CLI,输入以下命令,其中
<extension>是您要添加的扩展的组、工件、版本(GAV):quarkus extension add "<extension>"
要搜索特定扩展,请在
-Dextensions=之后输入扩展名称或部分名称。以下示例搜索名称中包含文本jdbc、agroal和non-existent 的扩展:./mvnw quarkus:add-extension -Dextensions=jdbc,agroal,non-exist-ent这个命令返回以下结果:
❌ Multiple extensions matching 'jdbc' * io.quarkus:quarkus-jdbc-h2 * io.quarkus:quarkus-jdbc-mariadb * io.quarkus:quarkus-jdbc-postgresql Be more specific, for example, by using the exact name or the full GAV. ✅ Adding extension io.quarkus:quarkus-agroal ❌ Cannot find a dependency matching 'non-exist-ent', maybe a typo? [...]
1.8. 将 Quarkus 项目导入到 IDE 中 复制链接链接已复制到粘贴板!
虽然可以在文本编辑器中开发 Quarkus 项目,但您可能会发现使用集成开发环境(IDE)在您的项目上工作变得更加简单。以下说明演示了如何将 Quarkus 项目导入到特定的 IDE 中。
先决条件
- 您有一个 Quarkus Maven 项目。
- 已安装 Quarkus 命令行界面(CLI),如果您计划以开发模式启动项目,则需要此项。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
为您的 IDE 完成所需步骤。
CodeReady Studio 或 Eclipse
- 在 CodeReady Studio 或 Eclipse 中,点 File>*Import*。
- 选择 Maven → Existing Maven Project。
- 接下来,选择项目的 root 位置。此时会出现可用模块的列表。
- 选择生成的项目,然后单击 Finish。
要编译并启动应用程序,请使用以下方法之一:
使用 Maven:
./mvnw quarkus:dev使用 Quarkus CLI:
quarkus dev
IntelliJ
在 IntelliJ 中,完成以下任务之一:
- 选择 File > New > ; Project from Existing Sources。
- 在 Welcome 页面上,选择 Import project。
- 选择项目根目录。
- 选择 Import project from external model,然后选择 Maven。
- 检查选项,然后单击 Next。
- 点 Finish。
要编译并启动应用程序,请使用以下方法之一:
使用 Maven:
./mvnw quarkus:dev使用 Quarkus CLI:
quarkus dev
Apache NetBeans
- 选择 File > Open Project。
-
选择
项目根目录。 - 单击 Open Project。
要编译并启动应用程序,请使用以下方法之一:
使用 Maven:
./mvnw quarkus:dev使用 Quarkus CLI:
quarkus dev
Visual Studio Code
- 安装 Java 扩展包.
- 在 Visual Studio Code 中,打开您的项目目录。
验证
项目作为 Maven 项目加载。
1.9. 配置 Quarkus 项目输出 复制链接链接已复制到粘贴板!
在构建应用程序前,您可以通过更改 application.properties 文件中属性的默认值来控制 build 命令的输出。
先决条件
- 您已创建了 Quarkus Maven 项目。
流程
-
进入
{project}/src/main/resources文件夹,并在文本编辑器中打开application.properties文件。 编辑您要更改的属性值并保存文件。
下表列出了您可以更改的属性:
Expand 属性 描述 类型 default quarkus.package.main-class应用程序的入口点。在大多数情况下,您必须更改这个值。
string
io.quarkus.runner.GeneratedMainquarkus.package.type软件包请求的输出类型,您可以将其设置为 'jar'(使用 'fast-jar')、'legacy-jar' 作为 pre-1.12 default jar 打包、'uber-jar'、'native' 或 'native-sources'。
string
jarquarkus.package.manifest.add-implementation-entries确定实施信息是否必须包含在运行程序 JAR 文件的
MANIFEST.MF文件中。布尔值
truequarkus.package.user-configured-ignored-entries不得复制到输出工件中的文件。
字符串(列表)
quarkus.package.runner-suffix应用到运行程序 JAR 文件的后缀。
string
-runnerquarkus.package.output-directory应用构建的输出文件夹。这相对于构建系统目标目录解析。
string
quarkus.package.output-name最终工件的名称。
string
1.10. 使用自定义配置集在 JVM 模式中测试 Quarkus 应用程序 复制链接链接已复制到粘贴板!
与任何其他正在运行的模式类似,测试的配置值是从 src/main/resources/application.properties 文件中读取的。
默认情况下,test 配置集在 JVM 模式下测试过程中处于活动状态,这意味着具有 %test 前缀的属性优先。例如,当使用以下配置执行测试时,属性 消息 返回的值为 Test Value。
message=Hello
%test.message=Test Value
如果 %test 配置集未激活(dev、prod),则属性 消息 返回的值是 Hello。
您的应用程序可能需要多个测试配置集,例如,当您需要针对不同的数据库实例运行相同的测试集时。要做到这一点,您需要覆盖测试配置集名称,您可以在执行 Maven 时设置系统属性 quarkus.test.profile。这样,您可以控制在测试过程中活跃的哪些配置值集合。
如需了解更多有关使用 'Starting With Quarkus' 示例的标准测试的信息,请参阅 Getting Started 指南中的使用 JUnit 测试 Quarkus 应用。
先决条件
- 使用 Apache Maven 创建的 Quarkus 项目。
流程
在 Quarkus 应用上运行测试时,测试配置 配置集默认设置为 active。但是,您可以使用 quarkus.test.profile 系统属性将配置集改为自定义配置集。
- 运行以下命令来测试应用程序:
mvn test -Dquarkus.test.profile=__<profile-name>__
您不能在原生模式中使用自定义测试配置配置集。原生测试始终在 prod 配置文件下运行。
1.11. 记录 Quarkus 应用程序构建类路径树 复制链接链接已复制到粘贴板!
Quarkus 构建过程将应用程序中使用的扩展的部署依赖项添加到原始应用程序类路径中。您可以看到构建类路径中包含哪些依赖项和版本。quarkus-bootstrap Maven 插件包含 build-tree 目标,它显示应用程序的构建依赖项树。
先决条件
- 您已创建了 Quarkus Maven 应用程序。
流程
要列出应用程序的构建依赖项树,请输入以下命令:
./mvnw quarkus:dependency-tree
以下提取提供了上一命令显示的输出示例:
[INFO] --- quarkus-bootstrap-maven-plugin:2.13:build-tree (default-cli) @ getting-started ---
[INFO] org.acme:getting-started:jar:1.0-SNAPSHOT
[INFO] └─ io.quarkus:quarkus-resteasy-deployment:jar:2.13 (compile)
[INFO] ├─ io.quarkus:quarkus-resteasy-server-common-deployment:jar:2.13 (compile)
[INFO] │ ├─ io.quarkus:quarkus-core-deployment:jar:2.13 (compile)
[INFO] │ │ ├─ commons-beanutils:commons-beanutils:jar:1.9.3 (compile)
[INFO] │ │ │ ├─ commons-logging:commons-logging:jar:1.2 (compile)
[INFO] │ │ │ └─ commons-collections:commons-collections:jar:3.2.2 (compile)
...
mvn dependency:tree 命令只显示应用程序的运行时依赖项
1.12. 生成原生可执行文件 复制链接链接已复制到粘贴板!
原生二进制文件是创建在特定操作系统(OS)或 CPU 架构上运行的可执行文件。
以下列表概述了原生可执行文件的一些示例:
- Mac 的通用二进制文件
- Linux 的 ELF 二进制文件
- Windows 的 EXE 二进制文件
构建原生可执行文件时,您的应用程序和依赖项(包括 JVM)被打包到一个文件中。应用程序的原生可执行文件包含以下项目:
- 编译的应用程序代码
- Java API
- 所需的库
- 用于改进应用程序启动时间和最小磁盘和内存占用量的 Java 虚拟机(JVM)的减少版本
要从 Quarkus 应用生成原生可执行文件,您可以选择容器内构建或 local-host 构建。下表解释您可以使用的不同构建选项:
| 构建选项 | Requires | 使用 | 结果 | 优点 |
|---|---|---|---|---|
| in-container build - Supported | 容器运行时,如 Podman 或 Docker |
默认 | Linux 64 位可执行文件 | GraalVM 不需要在本地设置,从而使 CI 管道 更有效地运行 |
| local-host build - 仅支持上游 | GraalVM 或 Mandrel 的本地安装 |
其本地安装作为 | 具有与执行构建的机器相同的操作系统和 CPU 架构的可执行文件 | 不允许或不想使用 Docker 或 Podman 等工具的开发人员的替代方案。总体比容器更快。 |
红帽构建的 Quarkus 2.13 仅支持基于 Java 17 的 Mandrel 22.3 基础镜像构建原生可执行文件。
虽然其他镜像在社区中可用,但产品不支持它们,因此您不应该将其用于您希望红帽提供支持的生产构建。
其源基于 Java 11 编写的应用程序(不使用 Java 12 - 17 的功能),仍可使用基于 Java 17 的 Mandrel 22.3 基础镜像编译应用程序的原生可执行文件。
Red Hat build of Quarkus 支持使用 红帽构建的 Quarkus 原生构建器镜像构建原生 Linux 可执行文件,这是 Mandrel 的产品化分发。如需更多信息,请参阅将 Quarkus 应用程序编译到原生可执行文件。使用红帽构建的 Quarkus 不支持使用 Oracle GraalVM 社区版(CE)、Mael 社区版本或任何其他 GraalVM 发行版构建原生可执行文件。
1.12.1. 使用 in-container 构建生成原生可执行文件 复制链接链接已复制到粘贴板!
要创建原生可执行文件并运行原生镜像测试,请使用由红帽构建的 Quarkus 提供的 原生 配置集进行容器内构建。
先决条件
- podman 或 Docker 已安装。
- 容器可以访问至少 8GB 内存。
流程
打开 Getting Started project
pom.xml文件,并验证项目是否包含native配置集:<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles>使用以下方法之一构建原生可执行文件:
使用 Maven:
对于 Docker:
./mvnw package -Pnative -Dquarkus.native.container-build=true对于 Podman:
./mvnw package -Pnative -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
其他资源
如需更多信息,请参阅 将 Quarkus 应用程序编译到原生可执行文件 中的"Native executable 配置属性"。
1.12.2. 使用 local-host 构建生成原生可执行文件 复制链接链接已复制到粘贴板!
如果您不使用 Docker 或 Podman,请使用 Quarkus local-host build 选项来创建和运行原生可执行文件。
使用本地主机构建方法比使用容器更快,并适用于使用 Linux 操作系统的机器。
红帽构建的 Quarkus 不支持在生产环境中使用以下步骤。只有在 Docker 或 Podman 不可用时,才使用这个方法测试或作为备份方法。
先决条件
Mandrel 或 GraalVm 的本地安装,根据 构建原生可执行文件 指南进行了正确配置。
-
另外,对于 GraalVM 安装,还必须安装
native-image。
-
另外,对于 GraalVM 安装,还必须安装
流程
对于 GraalVM 或 Mandrel,使用以下方法之一构建原生可执行文件:
使用 Maven:
./mvnw package -Pnative使用 Quarkus CLI:
quarkus build --native步骤结果
这些命令在目标目录中创建一个
*-runner二进制文件,其中适用以下内容:-
*-runner文件是由 Quarkus 生成的构建原生二进制文件。 目标目录是一个目录,Maven 会在构建 Maven 应用程序时创建该目录。注意构建原生可执行文件时,会启用
prod配置集,除非在quarkus.profile属性中修改了。
-
运行原生可执行文件:
./target/*-runner注意-
除非在
quarkus.test.native-image-profile属性中修改了,否则会使用prod配置集运行原生测试。
-
除非在
其他资源
如需更多信息,请参阅 Producing a native executable。
1.12.3. 手动创建容器 复制链接链接已复制到粘贴板!
本节演示了如何为 Linux AMD64 使用应用程序手动创建容器镜像。当您使用 Quarkus Native 容器生成原生镜像时,原生镜像会创建一个以 Linux AMD64 为目标的可执行文件。如果您的主机操作系统与 Linux AMD64 不同,则无法直接运行二进制文件,您需要手动创建容器。
您的 Quarkus Getting Started 项目在 src/main/docker 目录中包含一个 Dockerfile.native,其内容如下:
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application
EXPOSE 8080
USER 1001
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
通用基础镜像(UBI)
以下列表显示了可用于 Dockerfile 的合适镜像。
Red Hat Universal Base Image 8 (UBI8)。此基础镜像旨在设计并设计成为所有容器化应用程序、中间件和实用程序的基础层。
registry.access.redhat.com/ubi8/ubi:8.6Red Hat Universal Base Image 8 Minimal (UBI8-minimal)。使用 microdnf 作为软件包管理器的精简版 UBI8 镜像。
registry.access.redhat.com/ubi8/ubi-minimal:8.6- 所有红帽基础镜像都可在容器镜像目录站点中找到。https://catalog.redhat.com/software/containers/search?q=UBI&p=1
流程
使用以下方法之一构建原生 Linux 可执行文件:
docker:
./mvnw package -Pnative -Dquarkus.native.container-build=truePodman:
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
使用以下方法之一构建容器镜像:
docker:
docker build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .Podman
podman build -f src/main/docker/Dockerfile.native -t quarkus-quickstart/getting-started .
使用以下方法之一运行容器:
docker:
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-startedPodman:
podman run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
1.13. 测试原生可执行文件 复制链接链接已复制到粘贴板!
以原生模式测试应用,以测试原生可执行文件的功能。使用 @QuarkusIntegrationTest 注释来构建原生可执行文件,并根据 HTTP 端点运行测试。
流程
打开
pom.xml文件,并验证native配置集是否具有以下元素:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemPropertyVariables> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </execution> </executions> </plugin>Maven Failsafe 插件(
maven-failsafe-plugin)运行集成测试,并指示生成的原生可执行文件的位置。打开
src/test/java/org/acme/quickstart/NativeGreetingResourceIT.java文件,并验证它是否包含以下内容:package org.acme.getting.started; import io.quarkus.test.junit.QuarkusIntegrationTest; @QuarkusIntegrationTest1 public class GreetingResourceIT extends GreetingResourceTest {2 // Execute the same tests but in native mode. }运行测试:
./mvnw verify -Pnative以下示例显示了这个命令的输出:
./mvnw verify -Pnative ... [getting-started-1.0-SNAPSHOT-runner:18820] universe: 587.26 ms [getting-started-1.0-SNAPSHOT-runner:18820] (parse): 2,247.59 ms [getting-started-1.0-SNAPSHOT-runner:18820] (inline): 1,985.70 ms [getting-started-1.0-SNAPSHOT-runner:18820] (compile): 14,922.77 ms [getting-started-1.0-SNAPSHOT-runner:18820] compile: 20,361.28 ms [getting-started-1.0-SNAPSHOT-runner:18820] image: 2,228.30 ms [getting-started-1.0-SNAPSHOT-runner:18820] write: 364.35 ms [getting-started-1.0-SNAPSHOT-runner:18820] [total]: 52,777.76 ms [INFO] [INFO] --- maven-failsafe-plugin:2.22.1:integration-test (default) @ getting-started --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running org.acme.quickstart.NativeGreetingResourceIT Executing [/data/home/gsmet/git/quarkus-quickstarts/getting-started/target/getting-started-1.0-SNAPSHOT-runner, -Dquarkus.http.port=8081, -Dtest.url=http://localhost:8081, -Dquarkus.log.file.path=build/quarkus.log] 2019-04-15 11:33:20,348 INFO [io.quarkus] (main) Quarkus 999-SNAPSHOT started in 0.002s. Listening on: http://[::]:8081 2019-04-15 11:33:20,348 INFO [io.quarkus] (main) Installed features: [cdi, resteasy] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.387 s - in org.acme.quickstart.NativeGreetingResourceIT ...注意Quarkus 等待 60 秒,使原生镜像在自动失败原生测试前启动。您可以通过配置
quarkus.test.wait-time系统属性来更改此持续时间。您可以使用以下命令扩展等待时间,其中 <
duration> 是等待时间(以秒为单位):./mvnw verify -Pnative -Dquarkus.test.wait-time=<duration>
1.14. 使用 Quarkus 开发模式 复制链接链接已复制到粘贴板!
开发模式使用后台编译启用热部署,这意味着当您修改 Java 或资源文件时,刷新浏览器会自动生效。这也适用于配置属性文件等资源文件。您可以使用 Maven 或 Quarkus 命令行界面(CLI)在开发模式中启动 Quarkus。
先决条件
- 您已创建了 Quarkus Maven 应用程序。
- 已安装 Quarkus CLI,这是您可以在开发模式下启动 Quarkus 的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
-
切换到包含 Quarkus 应用
pom.xml文件的目录。 要以开发模式编译并启动 Quarkus 应用程序,请使用以下方法之一:
使用 Maven:
./mvnw quarkus:dev使用 Quarkus CLI:
quarkus dev
- 更改您的应用程序并保存文件。
刷新浏览器,以触发工作区扫描。
如果检测到任何更改,则会重新编译 Java 文件,并重新部署应用程序。然后,重新部署的应用程序会为您的请求提供服务。如果编译或部署存在问题,则会出现错误页面。
在开发模式中,调试器已被激活,并侦听端口
5005。可选: 要在运行应用前等待调试器附加,请包括
-Dsuspend:./mvnw quarkus:dev -Dsuspend可选: 要防止调试器运行,请包含
-Ddebug=false:./mvnw quarkus:dev -Ddebug=false
1.15. 调试 Quarkus 项目 复制链接链接已复制到粘贴板!
当红帽构建的 Quarkus 以开发模式启动时,会默认启用调试,调试器会监听端口 5005,而不挂起 JVM。您可以从命令行或配置系统属性来启用和配置 Quarkus 的调试功能。您还可以使用 Quarkus CLI 调试项目。
先决条件
- 您已创建了红帽构建的 Quarkus Maven 项目。
- 已安装 Quarkus 命令行界面(CLI),这是可用于编译和调试项目的方法之一。如需更多信息 ,请参阅安装 Quarkus CLI。
Quarkus CLI 仅用于开发模式。红帽不支持在生产环境中使用 Quarkus CLI。
流程
使用以下方法之一控制调试:
通过配置系统属性来控制调试器
更改
debug系统属性之一,其中PORT是调试器侦听的端口:-
错误:JVM 在禁用调试模式时启动。 -
true:JVM 以调试模式启动,并侦听端口5005。 -
客户端:JVM 在客户端模式中启动,并尝试连接到localhost:5005。 -
PORT: JVM 以调试模式启动并侦听PORT。
-
要在以 debug 模式运行时挂起 JVM,请将
suspend系统属性的值设置为以下值之一:-
y或true:调试模式 JVM 启动挂起。 -
n或false:调试模式 JVM 启动而不暂停。
-
从命令行控制调试器
要使用暂停的 JVM 以调试模式编译和启动 Quarkus 应用程序,请使用以下方法之一
使用 Maven:
./mvnw quarkus:dev -Dsuspend使用 Quarkus CLI:
quarkus dev -Dsuspend
为特定主机网络接口启用调试器
在开发模式中,为了安全起见,Quarkus 将 debug 主机接口设置为 localhost。
要为特定主机网络接口启用调试器,您可以使用以下方法之一使用 -DdebugHost 选项:
使用 Maven:
./mvnw quarkus:dev -DdebugHost=<host-ip-address>使用 Quarkus CLI:
quarkus dev -DdebugHost=<host-ip-address>
其中 < host-ip-address > 是您要启用调试的主机网络接口的 IP 地址。
要在所有主机接口上启用调试,请将 < host-ip-address& gt; 替换为以下值:
0.0.0.0