创建项目
学习如何在 Quarkus 中创建新项目。
生成新应用
Quarkus 提供了两种主要方式来生成新应用。
使用网页
可以通过访问 code.quarkus.io 直接生成新的 Quarkus 应用,选择所需的扩展、构建工具以及项目的基本信息。
如上图所示,我们可以为新 Quarkus 应用指定多个选项,包括:
- Group(组):表示该应用的所有者,通常为公司名称。
- Artifact(工件):应用的唯一标识符。
- 构建工具:可选择 Maven 或 Gradle。
- 版本号:生成项目的版本。
- Java 版本:使用的 Java 版本。
- 初始代码:是否由 Quarkus 生成初始代码。
- 所选扩展:应用中将使用的一系列扩展。
然后只需点击“生成你的应用”按钮,即可将源代码下载为 zip 文件。你也可以直接将代码推送到 GitHub。
使用开发工具
通过开发工具,只需运行生成命令即可。例如,使用 Maven 的命令如下:
1mvn io.quarkus.platform:quarkus-maven-plugin:2.15.3.Final:create \ 2 -DprojectGroupId=io.educative \ 3 -DprojectArtifactId=educative-quarkus
注意:本示例中我们使用 Maven 运行 Quarkus 开发工具,但你可以自由选择其他选项。
项目结构
在不添加任何扩展的情况下生成新项目后,educative-quarkus 文件夹中会包含以下文件和目录结构,不过较新版本的 Quarkus 可能略有不同。
- .mvn 目录:存放 Maven 包装器的配置文件。
- src 目录:存放源代码。包含两个子目录:test(用于测试)和 main(用于主程序代码)。根据所选扩展,Quarkus 会自动生成一些示例代码以及有助于构建应用的 Docker 配置。
- 其他文件:Quarkus 还会生成一些通用文件,如 .gitignore、.dockerignore、README,以及根据构建工具生成的 Maven 或 Gradle 配置文件。
接下来,我们将使用开发工具运行应用并查看结果。你可以使用课程末尾的沙箱环境来运行生成的应用。
添加依赖
常见的需求是从现有 API 获取数据。这可以通过向应用中添加某些扩展来实现。具体操作取决于你使用的开发工具:
- 使用 CLI:
quarkus extension add 'rest-client-reactive-jackson' - 使用 Maven:
./mvnw quarkus:add-extension -Dextensions='rest-client-reactive-jackson' - 使用 Gradle:
./gradlew addExtension --extensions='rest-client-reactive-jackson'
该命令会更新 pom.xml(或 build.gradle)文件,将所需依赖添加到项目中。
为了测试该依赖,我们需要创建一个新的服务来从 API 获取数据。本课程中,我们将获取产品列表。
但在那之前,需要先创建对应的模型类,如下所示:
1package io.educative.models; 2 3public class Product { 4 public int id; 5 public String title; 6 public String description; 7 8 @Override 9 public String toString() { 10 return "Product{" + 11 "id=" + id + 12 ", title='" + title + '\'' + 13 ", description='" + description + '\'' + 14 '}'; 15 } 16}
Product 类代表一个产品对象,而 ProductAPIResponse 是从 API 返回的响应数据结构。
现在可以创建处理 API 调用的服务类:
1package io.educative.services; 2 3import io.educative.models.ProductAPIResponse; 4import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 6import javax.ws.rs.GET; 7 8@RegisterRestClient(configKey = "product-api") 9public interface ProductService { 10 @GET 11 ProductAPIResponse getAll(); 12}
上述代码中,我们定义了一个接口用于调用 API。第 8 行用于指定要调用的 API 地址,支持同时配置多个 API。必须更新配置文件,添加如下配置:quarkus.rest-client.product-api.url=https://dummyjson.com/products。
现在,我们可以在已生成的 GreetingResource 控制器中直接使用这个 REST 客户端进行测试:
1package io.educative; 2 3import io.educative.models.Product; 4import io.educative.models.ProductAPIResponse; 5import io.educative.services.ProductService; 6import org.eclipse.microprofile.rest.client.inject.RestClient; 7 8import javax.ws.rs.GET; 9import javax.ws.rs.Path; 10import javax.ws.rs.Produces; 11import javax.ws.rs.core.MediaType; 12import java.util.Set; 13 14@Path("/hello") 15public class GreetingResource { 16 17 @RestClient 18 ProductService productService; 19 20 @GET 21 @Produces(MediaType.TEXT_PLAIN) 22 public String hello() { 23 return "Hello from RESTEasy Reactive"; 24 } 25 26 @GET 27 @Path("/products") 28 @Produces(MediaType.TEXT_PLAIN) 29 public Set<Product> getAllProducts() { 30 return productService.getAll().products; 31 } 32}
在上述代码中,我们做了以下改动:
- 第 17–18 行:注入并使用
ProductService作为 REST 客户端。 - 第 26–31 行:新增一个返回产品列表的接口端点。
注意:上述示例并非有效的 REST 响应格式,它使用了
Product类中自动生成的toString()方法。
你可以通过下方沙箱环境测试运行结果:
No configuration found for ID: db6f8949ac46eae1fb1f425a562700d57043608d6b992f720eee33344b3f4fe0
当访问 /hello/products 路径时,你应该能够看到由 REST 客户端获取的产品列表。