启动 Quarkus 3

Quarkus 3 将继续推动 Java 开发向前发展,快速前进,并始终提供最新的技术用户体验。

我们很高兴发布第一个 Quarkus 3 Alpha 版本,供用户试用和扩展作者集成,以便我们获得早期反馈。

以下博客概述了 Quarkus 3 的内容、发布计划、如何试用以及如何升级。

Quarkus 3 将包含什么?

Quarkus 3 目前计划的亮点包括:

  • Hibernate ORM 6 - 更快、更安全、更好(查看 此演示 了解它有多棒)。

  • Jakarta EE 10 API 和包 - 跟随 Java 世界的最新发展

  • Eclipse MicroProfile 6 - 所有 MP 规范的最新更新,继续与实践状态同步发展

  • HTTP/3 支持(又名 Quic)- 新的 HTTP 版本,使用 UDP 解决队头阻塞问题。

  • io_uring - 下一代异步 IO 支持。如果您关心性能和效率(响应时间、延迟),这绝对是颠覆性的。

  • 虚拟线程(又名 Loom)和结构化并发支持 - 基于我们初步集成吸取的经验教训,我们现在正在研究扩展和改进支持。

  • java.util.concurrent.Flow - 是时候进化了;Flow 自 Java 9 起就在 JDK 中。因此,我们希望从 Reactive Streams 迁移到 java.util.concurrent.Flow

  • 文档 - 按照 Diataxis 框架原则,已开始着手改进文档,使其更完善、结构更清晰。

  • 更新工具 - 将是一个主要的新版本,我们希望使迁移过程尽可能顺利。因此,我们将提供迁移工具。

  • 新的 gRPC 服务器,更灵活、更易于维护

  • 焕然一新的开发 UI

  • <此处为您的扩展的精彩功能/改进>

Java 目标

Quarkus 3 继续(如 Quarkus 2)以 Java 11 为最低版本目标。用户的默认推荐是使用 Java 17。

我们将根据用户反馈和 Java 17 在生态系统中的普及情况,不断修订最低 Java 版本。目前,我们认为允许尽可能多的 Java 11 用户升级到 Quarkus 3 并使用基于 Jakarta 的依赖具有更高的价值。

发布计划

2.x 版本的月度发布周期将继续。Quarkus 3.x 预览版(Alpha、Beta)将并行发布。此博客标志着第一个 Quarkus 3 Alpha 的开始。

集成我们想要的变更集并收集上一版本反馈(来自用户和扩展维护者……)需要一个月以上的时间。因此,最初的 3.x 版本发布周期将比平时稍慢。

我们的目的是提供几个月的时间,以允许持续集成,并开始发布包含已准备好的成员的 Quarkus 平台,然后不断纳入更多成员。

建议计划

  • 3.0.x 核心和平台版本的 Alpha 版本将定期发布,以实现轻松的集成构建

  • 2.x 版本将继续每月发布

  • 在 3.0.0.Alphas 开始对用户有用时,在 Quarkus 博客上宣布 Quarkus 3(就是本博客!)。

  • 收集扩展贡献者和用户关于就绪情况和挑战的反馈,以提供帮助和进行调整

  • 如果一切顺利,目标是在 2023 年 2 月发布 3.0.0.Final 版本

破坏性变更?保持冷静!

虽然主版本号的提升可能意味着破坏性变更,但我们仍然要求所有贡献者都致力于实现平滑的升级体验。例如,迁移到 Jakarta 及其包重命名等更改影响很大。我们打算尽力使现有扩展和用户应用程序能够通过提供迁移工具从 Quarkus 2 迁移到 Quarkus 3。

特别是对于核心 API,我们将致力于使此类迁移变得微不足道,从而能够以与我们为 Quarkus 2.x 自动转换为使用 Jakarta 命名包类似的方式进行自动化。

尝试 Quarkus 3

目前,最简单的入门方法是使用 code.quarkus.io 或使用 Quarkus CLI

quarkus create app --stream=3.0

请注意,在此阶段,虽然所有核心扩展都可用,但只有 Quarkus 平台的部分可用。 并非所有扩展都已迁移到 Jakarta 包(例如,Camel Quarkus 或 Kogito 尚未可用)。

升级到 Quarkus 3

对于所有扩展都可用的现有应用程序,我们有一个您可以尝试的早期 OpenRewrite 配方。

有一个单行程序尝试使用 JBang 脚本自动执行此操作

适用于 Linux

curl -Ls https://sh.jbang.dev | bash -s - --fresh upgrade-to-quarkus3@quarkusio

适用于 Windows

iex "& { $(iwr https://ps.jbang.dev) } --fresh upgrade-to-quarkus3@quarkusio"

使用 JBang 脚本也会迁移文档(以 Markdown on AsciiDoc 格式)。

这是首选方法,因为下面介绍的方法只会迁移源代码。

您也可以手动执行此操作,方法是下载 OpenRewrite 配方 并使用以下 Maven 命令手动应用它

curl -o quarkus3.yml https://raw.githubusercontent.com/quarkusio/quarkus/main/jakarta/quarkus3.yml
mvn org.openrewrite.maven:rewrite-maven-plugin:4.39.0:run \
   -Drewrite.configLocation=quarkus3.yml \
   -DactiveRecipes=io.quarkus.openrewrite.Quarkus3

对于多模块项目,建议在 -Drewrite.configLocation 参数中指定绝对路径,以便子模块可以找到迁移描述符。

运行此命令后,您的项目应已更新其依赖项和源代码以使用 Quarkus 3。

如果它对您不起作用,可能是我们遗漏了一些内容,或者您正在使用尚不支持 Quarkus 3 的扩展。

无论哪种情况,请告知我们,以便我们可以共同改进迁移脚本。

为扩展维护者提供帮助

您是否维护扩展?这些更改几乎肯定会影响您的扩展。我们已发布了一份备忘单,其中包含针对扩展维护者的指南和脚本

谢谢

我们期待您的反馈,我们将在 quarkus-dev 上发布有关开发新闻的更新,并在本博客上发布面向用户的消息。

玩得开心!