2.3 创建第一个Quarkus应用程序
有很多方法可以创建Quarkus应用程序:
• 手动创建项目pom.xml或build.gradle文件,添加Quarkus依赖项,设置和配置插件,以及定义源文件夹。
• 使用Maven和Quarkus插件构建项目框架。
• 访问https://code.quarkus.io并选择所需的依赖项。这是最简单、最快捷的入门方式,也是我们将使用的方法。
是时候开始创建一个项目了!前往https://code.quarkus.io,你将看到图2-4所示的页面。我们圈出了一些关键部分来详细解释这些内容的含义。
图2-4:Quarkus项目选择
页面顶部是生成项目的Quarkus版本。就在它下方的左,你可以自定义项目的组名和工件名。如果需要,也可以在以后进行更改,不必拘泥于使用org.acme。
在右边,用户可以决定是否要将初学者代码添加到项目中。默认值是Yes,因此如果选择任何带有CODE标记的扩展,例如RESTEasy JAX-RS,那么将为该项目生成该扩展的启动代码。页面顶部下方是所有可用Quarkus扩展的列表。有很多扩展可用,图2-4只显示了一部分。使用每个复选框选择要包含在项目中的特定扩展。
最后,如果你不想滚动浏览所有扩展名,请在所有扩展名上方的搜索框中输入词条。输入时,下面的扩展名列表将进行筛选,只显示与搜索条件匹配的扩展名。选择扩展时,这些被选中的扩展会出现在“Generate your application”旁边的“Selected Extensions”区域下。
图2-5显示了我们即将生成应用程序时的屏幕外观。
图2-5:Quarkus项目生成
你可以看到,我们选择了不生成任何启动程序代码,并且选择了RESTEasy JAX-RS扩展。我们目前仍坚持使用普通的JAXR,第8章将探讨一种响应式更强的JAX-RS。
当我们悬停在“Generate your application”上时,可以决定将该项目作为ZIP文件下载或发布到GitHub存储库。现在,我们将以ZIP文件的形式下载。该文件将自动下载,其名称与工件名称匹配。下载完成后,将ZIP文件解压缩到一个目录中。
完成后,我们打开一个终端窗口,并切换到提取生成项目的目录。让我们开始使用实时重新加载(见示例2-11),体验真正的开发者乐趣!
示例2-11:在开发模式下运行应用程序
前面的命令在实时重新加载中启动Quarkus,使我们能够快速迭代代码并立即看到结果。成功启动将产生终端输出,如示例2-12所示。
示例2-12:输出Quarkus应用程序
在浏览器中打开http://localhost:8080,你将看到Resource not found。
事实上,没出什么问题。目光锐利的读者可能已经注意到,启动日志只将cdi列为已安装的功能。那RESTEasy呢?我们在创建项目时为其选择了扩展。看看pom.xml内部,你将看到依赖项(见示例2-13)。
示例2-13:生成项目的Quarkus扩展依赖项(chapter-2/code-with-quarkus/pom.xml)
RESTEasy绝对是一个依赖项,那么到底发生了什么?在构建过程中,Quarkus发现实际上没有任何代码在使用RESTEasy,因此卸载了该功能并将其删除,以节省内存。现在我们来解决这个问题。
Quarkus仍在运行时,在/src/main/java中创建org.acme包。现在在包和示例2-14的上下文中创建一个名为MyResource的类。
示例2-14:JAX-RS MyResource(chapter-2/code-with-quarkus/src/main/java/org/acme/MyResource.Java)
你可能想知道为什么在前面的代码片段中没有任何Quarkus特定的import行。Quarkus利用不断增长的50多个同类最佳库,提供了一个内聚的全栈框架。在前面的示例中,我们使用JAX-RS(这是一种简单但高效且灵活的方法)来构建HTTP和REST API。
刷新http://localhost:8080,我们现在在浏览器中看到Hi。发生了什么事?查看终端窗口,见示例2-15。
示例2-15:代码更改后自动重启应用程序
我们可以看到Quarkus注意到了对MyResource.Java的修改,停下,然后重新启动。看看已安装的功能,我们看到应用程序现在已包括resteasy。更妙的是,服务器在300多毫秒内就停止并重新启动了。
我们为什么不多探索一下实时加载呢,更好地感受真正的开发者乐趣吧!mvn quarkus:dev仍在运行时,在浏览器中打开http://localhost:8080/welcome,如图2-6所示。
图2-6:找不到资源
不要太害怕,我们确实期待它,因为我们还没有任何东西来响应/welcome端点。然而,Quarkus为我们提供了一些内部链接,帮助我们根据对应用程序的了解来诊断问题。我们将看到有效端点的列表。在本例中,REST资源只有一个HTTP,叫GET/。
在“Additional endpoints”下有一些端点可以在开发应用程序时提供帮助。在本例中,我们有与ArC [ ArC是Quarkus基于上下文和依赖项注入(CDI)的Bean容器]相关的端点,以及到开发者控制台的链接。单击开发者控制台链接将进入其主页,如图2-7所示。
图2-7:Quarkus开发者控制台
现在没有太多,但需要记住,我们添加的唯一扩展是RESTEasy。随着我们用更多扩展来增强应用程序,开发者控制台将提供更多选项和功能。我们偏离了正轨,所以让我们回到解决页面加载失败的问题上来!当浏览器中的/welcome页面打开时,返回源代码,创建一个名为WelcomeResource的新类(见示例2-16)。
示例2-16:JAX-RS WelcomeResource(chapter-2/code-with-quarkus/src/main/java/org/acme/WelcomeResource.java)
编写完类后,返回浏览器并单击“刷新”。
触发HTTP请求会导致Quarkus检查自上次请求以来是否有任何文件被修改,因为我们正在使用实时重新加载运行。Quarkus注意到WelcomeResource的存在,对其进行编译,然后重新启动服务器。如果你和我们一样,那么可能没有意识到幕后发生的一切,因为浏览器毫不延迟地给出了预期的响应。
这有关于首次使用https://code.quarkus.io网页来创建Quarkus项目,并体验使用Quarkus实时加载带来的轻松开发的大量信息。开发过程还存在缺点,我们将继续探索实时加载可以做的每一件事。