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

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 的 |
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
的能力。
Mutiny 2 和 Java Flow
Quarkus 已升级到 Mutiny 2,现在使用 Java Flow API 而不是 Reactive Streams。
开发工具
开发者体验是 Quarkus 的一个关键方面,我们正在不断改进它。
所有开发工具中的 quarkus deploy
Quarkus CLI 以及 Maven 和 Gradle 插件现在都具有 deploy
Quarkus 应用程序的能力。
quarkus deploy
mvn quarkus:deploy
gradle deploy
这使得 Quarkus 应用程序能够部署到 Kubernetes、Knative 和 OpenShift 等平台。所有这些都无需更改项目依赖项或配置,从而简化了开发者体验。
RESTEasy Reactive
RESTEasy Reactive 带来了许多可用性增强,例如检索所有 multipart 部分。
请记住,RESTEasy Reactive 是我们的默认 REST 层,涵盖了响应式和阻塞式工作负载。
OpenTelemetry
OpenTelemetry 扩展已被重写以支持 SDK 自动配置,并经历了许多更改。
配置命名空间已更改为 quarkus.otel.*
。我们建议切换到新的配置属性,尽管旧属性目前仍然支持。
此外,为 JDBC 启用 OpenTelemetry 现在只需将 quarkus.datasource.jdbc.telemetry
设置为 true
即可。您不再需要修改 JDBC 连接 URL。
Qute
Qute,我们的模板引擎,也获得了许多改进,例如通过 缓存部分,能够缓存很少更改的模板部分。
数据库迁移
您使用 Flyway 和 Liquibase 的数据库迁移现在作为 init 容器在清单中运行。
init 容器中执行迁移/设置工作的概念可供其他扩展实现和支持。
Flyway 扩展支持自定义凭据/ URL 来连接数据库,您可以更轻松地自定义 Flyway 实例的配置。
Elasticsearch Java 客户端扩展
新的 Elasticsearch Java 客户端作为全新的扩展得到支持。这解决了阻止我们更新已弃用的 High Level REST Client 的许可问题。
要使用此新客户端,请查看更新的 Elasticsearch 指南。
调度器 API
您现在可以通过使用调度器编程 API 来安排作业,该 API 在 调度器参考指南中有描述。
其他更改
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 的完整更改日志
-
3.0.0.Alpha1 和 3.0.0.Alpha2 的更改日志为空,因为这些版本只是 Quarkus 2 版本到 Jakarta EE 10 的转换
贡献者
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 用户或只是好奇,请不要害羞,加入我们热情的社区
-
在 GitHub 上提供反馈。
-
编写一些代码并 提交 PR。
-
在 Stack Overflow 上提问。