Quarkus 3.0,我们的全新主要版本发布了!

Quarkus 3.0 是社区大量工作和奉献的成果。Quarkus 持续作为一个开源栈,用于编写 Java 应用程序,提供无与伦比的启动时间、内存占用和开发者体验。

Quarkus 3 的开发始于去年 3 月 18 日,当时我们有一个疯狂的想法,可以在继续开发 Quarkus 2 的同时,重写整个树以迁移到新的 jakarta.* 包。

Quarkus 3.0 基于 Jakarta EE 10,正如您所料,这并非唯一的更改。此版本包含了我们在该期间实现的大量新功能和增强。

此公告包含有关新功能和升级方法的许多信息,因此我们建议您在升级到 Quarkus 3 之前仔细阅读。

有什么新功能?

新的 Dev UI

dev ui

Quarkus 2 引入了 Dev UI,它提供了一个在开发期间使用的 Web UI。扩展可以提供自己的 Dev UI 页面以提供附加功能。

Quarkus 3.0 现在拥有一个新的 Dev UI,它更具可扩展性且更易于使用。它还拥有一个全新的、大大改进的外观和感觉。

新 Dev UI 默认可用。但是,由于并非所有扩展都已迁移到新的 Dev UI,您仍然可以在 /q/dev-v1 访问旧的 Dev UI。旧的 Dev UI 计划在未来的版本中移除。

我们在 Quarkus YouTube 频道上有一个 播放列表,展示了新的 Dev UI,解释了新功能以及如何使用和扩展它。

Jakarta EE 10

Quarkus 2 基于 Jakarta EE 8。Quarkus 3 基于 Jakarta EE 10。

最明显的变化是 Jakarta EE 的 javax.* 包已移至 jakarta.*。此更改要求修改任何依赖 javax.* 包的源代码、依赖及其传递性依赖。

有关 quarkus update 如何帮助您迁移的更多信息,请参阅 升级到 Quarkus 3.0 部分。

切换到以 Jakarta EE 10 为目标带来了两个主要改进

  • 更广泛的 Java 生态系统正在转向 Jakarta 依赖,从而可以更轻松地共享和兼容的实现。

  • CDI 引入了 CDI Lite 和 Build Compatible Extensions (BCE) 的概念,这些概念支持跨 CDI 实现兼容的标准扩展,并利用 Quarkus 构建时优化的优势。

只有 Jakarta EE 的 javax.* 包发生了变化。JDK 中的包仍然在 javax.* 下。

Eclipse MicroProfile 6

Eclipse MicroProfile 6.0 与 Jakarta EE 10 Core Profile 对齐,并用 MicroProfile Telemetry 替换了 MicroProfile OpenTracing。

Hibernate ORM 6

Quarkus 3 中最大的变化之一是我们已将 Hibernate ORM 从 5 版本升级到 6.2 版本。

Hibernate ORM 6 是一个主要的新版本,它带来了许多更改,其中一些是破坏性的。

要从 Quarkus 用户角度了解 Hibernate ORM 6 中更改的更多信息,请参阅 Hibernate ORM 5 到 6 迁移

Hibernate ORM 的发布公告包含有关 Hibernate ORM 6 中更改/改进的大量信息

升级到 Hibernate ORM 6 需要一些工作和测试。请务必查看下面的 升级到 Quarkus 3.0 部分。

Quarkus Hibernate ORM 扩展本身也做了一些改进,例如

  • 支持将 StatementInspector 作为 @PersistenceUnitExtension 管理的 bean。

  • 通过使用 CDI (Contexts and Dependency Injection) 来注入 StatelessSession 的能力。

Hibernate Reactive 2

Hibernate Reactive 已升级到 2.0 版本,以兼容 Hibernate ORM 6。

Mutiny 2 和 Java Flow

Quarkus 已升级到 Mutiny 2,现在使用 Java Flow API 而不是 Reactive Streams。

开发工具

开发者体验是 Quarkus 的一个关键方面,我们正在不断改进它。

CLI 插件

Quarkus CLI 现在可通过插件进行扩展。请参阅 CLI 指南中的详细信息。

预计未来很快将以插件的形式在 Quarkus CLI 中推出许多新功能。

更新工具

Quarkus 3.0 有一个新的更新工具,可以从根本上简化将项目更新到最新 Quarkus 版本的过程。

您可以在 升级到 Quarkus 3.0 部分了解更多关于它的信息。

所有开发工具中的 quarkus deploy

Quarkus CLI 以及 Maven 和 Gradle 插件现在都具有 deploy Quarkus 应用程序的能力。

quarkus deploy
mvn quarkus:deploy
gradle deploy

这使得 Quarkus 应用程序能够部署到 Kubernetes、Knative 和 OpenShift 等平台。所有这些都无需更改项目依赖项或配置,从而简化了开发者体验。

支持 Maven 3.9

Maven 3.9 带来了一些破坏性更改,并且与 Quarkus 的集成未能正常工作。现在已修复,您可以使用 Maven 3.9 来构建您的 Quarkus 3 应用程序。

此外,Maven 3.8.2 是 Quarkus 3 项目的最低要求。

Gradle 8

我们的 Gradle 支持已升级到 Gradle 8。

管理网络接口

到目前为止,所有 Quarkus 端点都暴露在同一个网络接口上。

从 Quarkus 3.0 开始,您可以通过 特定的管理接口将健康和指标等技术端点暴露在不同的接口上。

/q/info

要公开应用程序的信息(如 git hash),请将 quarkus-info 扩展添加到您的项目中。

该端点可在 /q/info 上访问,如果您启用它,它将在管理网络接口上公开。

RESTEasy Reactive

RESTEasy Reactive 带来了许多可用性增强,例如检索所有 multipart 部分。

请记住,RESTEasy Reactive 是我们的默认 REST 层,涵盖了响应式和阻塞式工作负载。

OpenTelemetry

OpenTelemetry 扩展已被重写以支持 SDK 自动配置,并经历了许多更改。

配置命名空间已更改为 quarkus.otel.*。我们建议切换到新的配置属性,尽管旧属性目前仍然支持。

此外,为 JDBC 启用 OpenTelemetry 现在只需将 quarkus.datasource.jdbc.telemetry 设置为 true 即可。您不再需要修改 JDBC 连接 URL。

多个邮件发送器

Quarkus 3.0 支持通过多个 SMTP 服务器发送电子邮件。

请查看 更新的文档

Qute

Qute,我们的模板引擎,也获得了许多改进,例如通过 缓存部分,能够缓存很少更改的模板部分。

缓存

现在可以使用 Redis 作为 Cache 扩展的后端。

有关更多信息,请参阅 专用指南

Cache 扩展还允许您定义一个全局默认缓存配置,该配置将应用于您的所有缓存。

数据库迁移

您使用 Flyway 和 Liquibase 的数据库迁移现在作为 init 容器在清单中运行。

init 容器中执行迁移/设置工作的概念可供其他扩展实现和支持。

Flyway 扩展支持自定义凭据/ URL 来连接数据库,您可以更轻松地自定义 Flyway 实例的配置。

MongoDB

现在支持 MongoDB 连接的 CredentialsProvider

Elasticsearch Java 客户端扩展

新的 Elasticsearch Java 客户端作为全新的扩展得到支持。这解决了阻止我们更新已弃用的 High Level REST Client 的许可问题。

要使用此新客户端,请查看更新的 Elasticsearch 指南

gRPC

gRPC 扩展已进行多项增强,例如支持 InProcess

调度器 API

您现在可以通过使用调度器编程 API 来安排作业,该 API 在 调度器参考指南中有描述。

Kubernetes 客户端

Kubernetes 客户端已升级到 6.5 版本。

Azure Functions 扩展

得益于新的 Azure Functions 扩展,Azure 函数的开发比以往任何时候都更容易。

请在 专用指南中了解更多关于它的信息。

其他更改

Quarkus 平台就绪情况

我们一直在努力确保 Quarkus 平台已准备好用于生产环境。并非 Quarkus 2 平台中找到的所有扩展在 Quarkus 3 平台中都可用或尚未最终确定,但它们正在路上。

以下扩展可用

  • Debezium

  • Optaplanner

  • Google Cloud Services

  • Cassandra

  • Camel (M1 里程碑)

以下扩展尚未可用,但很快将可用

  • Operator SDK

如果您正在使用缺失或无法工作的扩展,请在其各自的 issue tracker 系统中提交 issue。

Java 11 已弃用

OpenJDK 社区将于 2023 年 9 月结束对 Java 11 的积极支持。我们仍计划在此日期之后为核心 Quarkus 功能支持 Java 11,但 Java 11 现在已被标记为弃用。我们建议您升级到 Java 17 或更高版本,如果您想使用最新最好的 Quarkus 版本。

发布节奏和长期支持

随着 Quarkus 3 的最终发布,我们将恢复我们常规的、持续的发布节奏,大约每五周发布一次。这提供了一个易于采用和升级的小增量更改交付链。

我们知道其中一些人正在寻找更稳定的发布节奏,并且我们正在从 Quarkus 3.2 开始制定一项新的长期支持 (LTS) 政策。在接近 3.2 版本时,我们将提供有关此的详细信息。Java 11 仍将在核心部分支持。

Quarkiverse

Quarkus 不仅仅是 https://github.com/quarkusio/quarkus 仓库和 Quarkus 平台。它也是 Quarkus 生态系统的其余部分 - 即所谓的 Quarkiverse。这些扩展由世界各地的许多贡献者和组织托管和维护。有些在他们的 GitHub 仓库中托管这些扩展,有些则在 Quarkiverse Hub 中托管。

随着 Quarkus 3 的发布,这主要是由于许多核心依赖项的包更改,我们很高兴地说,其中许多扩展已经更新为与 Quarkus 3.0 兼容。我们正在与剩余扩展的维护者合作,以使它们也更新。

升级到 Quarkus 3.0

一如既往,我们编写了一个 非常全面的迁移指南来帮助您更新到 Quarkus 3.0。

它由专门的 Hibernate ORM 6.2 更新指南补充。

但这还不是全部:Quarkus 3.0 引入了一个更新工具,可以帮助您更新项目到 Quarkus 3。

此升级工具将执行以下任务,其中包含

  • 更新 Quarkus 版本

  • 调整包以使用 jakarta.*

  • 在某些情况下调整您的依赖项

  • 将您的 Quarkiverse 扩展升级到与 Quarkus 3.0 兼容的版本

  • 当配置属性发生更改时,调整您的配置文件

它并不处理所有问题(通常,Hibernate ORM API 的更改不包含在更新工具中),但它应该能够处理大部分繁琐的工作。

此更新工具可用于 Quarkus 应用程序和 Quarkus 扩展,无论是使用 Java 或 Kotlin 的 Maven 还是 Gradle 项目。

如果您使用 Quarkus CLI(推荐),请将其升级到最新版本并运行

quarkus update --stream=3.0

如果您不使用 CLI 而使用 Maven,请使用 Quarkus Maven 插件来更新您的项目

./mvnw io.quarkus.platform:quarkus-maven-plugin:3.0.1.Final:update -N -Dstream=3.0

如果您不使用 CLI 而使用 Gradle,请使用 Quarkus Gradle 插件来执行此操作

./gradlew -PquarkusPluginVersion=3.0.1.Final quarkusUpdate --stream=3.0

有关更多信息,请参阅 专用指南

我正在使用 Quarkus 2.x,我需要立即更新吗?

我们知道升级到 Quarkus 3.0 将需要您进行一些工作和测试,特别是如果您使用 Hibernate ORM。

因此,我们将为 Quarkus 2.16 提供错误修复和重要的 CVE 修复几个月,以便您有时间将应用程序升级到 Quarkus 3.x。

完整更新日志

您可以在 GitHub 上查看 Quarkus 3.0 的完整更改日志

贡献者

Quarkus 社区不断壮大,现已有 788 名贡献者。非常感谢每一位贡献者。

特别是对于 3.0 版本,感谢 Adler Fleurant, Adrian Pauli, Ales Justin, Alex Martel, Alexandre Dutra, Alexei Bratuhin, Alexey Loubyansky, Alexey Sharandin, amoscatelli, Andrea Cosentino, Andrea Peruffo, Andri Reveli, Andy Damevin, Àngel Ollé Blázquez, Antonio Costa, Antonio Goncalves, Antonio Jacob Costa, arik-dig, Ashish Ranjan, Auri Munoz, Benedikt Ritter, benstone, besta, Bill Burke, Brad Hards, Bruno Baptista, Bruno Borges, Bruno Leonardo Gonçalves, Bård Kristian Haaland-Sørensen, Carles Arnal, Chexpir, Chihiro Ito, Chris Laprun, Christian Berger, Christian Pieczewski, Christian von Atzigen, Christoph Hermann, Clemens Classen, Clement Escoffier, Damon Sutherland, Dan Dunning, David Andlinger, David Arnold, David M. Lloyd, Davide D’Alto, Dmitri Bourlatchkov, Efim Smykov, Eric Deandrea, Erin Schnabel, faculbsz, Falko Modler, Felipe Henrique Gross Windmoller, Fikru Mengesha, Filippe Spolti, Foivos Zakkak, Foobartender, Fouad Almalki, franz1981, Galder Zamarreño, Geert Schuring, George Gastaldi, Georgios Andrianakis, Gerhard Flothow, Giovanni Barbaro, Guillaume DOUSSIN, Guillaume Le Floch, Guillaume Nieser, Guillaume Smet, Gunnar Morling, Gwenneg Lepage, Harald Albers, Helber Belmiro, Holly Cummins, Hugo Guerrero, IgnasiCR, imperatorx, Ioannis Canellos, Ivan Bazalii, Jan Martiska, Jan Wiemer, Jasmin Suljic, Jayson Minard, Jesse Ehrenzweig, Joe Siponen, John OHara, Jonathan Kolberg, Jorge Solórzano, Jose, Jose Carvajal, Josef Andersson, jtama, Julien Ponge, Julio Enrique Santana Lora, Justin Lee, Katia Aresti, kdnakt, Kevin Dubois, Konstantin Gribov, Konstantin Silin, kottmann, Ladislav Thon, Laure Souche, Leandro Quiroga, Loïc Mathieu, luca-bassoricci, Lukas Lowinger, Lukáš Petrovický, luneo7, Manyanda Chitimbo, Marc Nuri, Marc Schlegel, Marcel Lohmann, Marcell Cruz, Marco Bungart, Marco Schaub, Marek Skacelik, marko-bekhta, Markus Himmel, Martin Kouba, Martin Panzer, Marvin B. Lillehaug, Matej Novotny, Matteo Mortari, Max Rydahl Andersen, Mazen Khalil, Melloware, mfpc, Michael Edgar, Michael Mosmann, Michael Musgrove, Michal Karm Babacek, Michal Maléř, Michal Vavřík, Michelle Purcell, Mickey Maler, Mihai.Poenaru, Moritz Heine, mrizzi, mun711, Nathan Erwin, Nathan Mittelette, Nicolas Filotto, nscuro, oliv37, Orbifoldt, Ozan Gunalp, Özkan Pakdil, Pablo Gonzalez Granados, Paulo Casaes, Pavel.Vervenko, Pedro Igor, Pedro Pereira, Peter Palaga, Phillip Krüger, Radoslaw Adamiak, Radovan Synek, Ramon Boss, Robbie Gemmell, Robert Gonciarz, Robert Stupp, Roberto Cortez, Rolfe Dlugy-Hegwer, Romain Quinio, Rostislav Svoboda, Sanne Grinovero, Sebastian Schuster, Sergey Beryozkin, Severin Gehwolf, shjones, skraft-redhat, spencercjh, Stuart Douglas, sturdy5, Stéphane Épardaud, Sébastien CROCQUESEL, Sébastien Crocquesel, Tamas Cservenak, Theodor Mihalache, Thomas Segismont, Thor Weinreich, tom, Tom Cunningham, Vaclav Svejcar, Vincent Sevel xstefank, Yoann Rodière, Yoshikazu Nojima, Yubao Liu, zedbeit, Zheng Feng, and Žiga Deisinger。

我们还要感谢 Quarkiverse 及其他地方的所有扩展维护者,他们辛勤工作,为 Quarkus 3.0 准备了扩展生态系统。

加入我们

我们非常重视您的反馈,请报告错误,并提出改进建议……让我们一起创造伟大的东西!

如果您是 Quarkus 用户或只是好奇,请不要害羞,加入我们热情的社区