Spring Tools 中的新 Spring Boot 版本验证和升级支持

工程 | Martin Lippert | 2023 年 1 月 17 日 | ...

Spring Boot 的新版本发布频率相当高,将您的项目更新到更新的 Spring Boot 版本是全球许多团队和组织日常工作的一部分。

有时这些升级很简单,例如对于主要包含错误修复和解决 CVE 的补丁版本。与此相反,升级到新的次要版本甚至主版本需要更多的工作,包括代码更改以适应新的或更改的 API,更新配置以不再使用已弃用的键,等等。

Spring 的每个新次要或主要版本都会附带一份关于这些更改的全面指南和文档,您可以阅读并遵循它来升级您的项目。一个很好的例子是用于将您的项目升级到 Spring Boot 3 的新迁移指南

在 IDE 中验证版本

Spring Tools 4.17.1 的最新版本(以及 VSCode 中相应的 Spring Boot Tools 1.43.0 版本)包含了一些实验性功能,可以帮助您及时了解最新的 Spring Boot 版本,无论是最新的补丁版本还是最新的主要和次要版本。

这里第一个值得注意的新实验性功能是能够自动验证您在工作区项目中使用的 Spring Boot 版本。新版本验证功能会在存在比您项目使用的 Spring Boot 版本更新的补丁、次要或主要版本时标记您的构建文件。一旦新版本在 Maven Central 上可用,这些标记就会立即出现在您编码环境中的“问题”视图中。

版本验证会独立处理新的补丁、次要和主要版本,您可以控制每个验证的严重程度。如果您想暂时忽略新的主版本,只需将新主版本的首选项设置为“忽略”。如果您想将新的补丁版本标记为警告甚至错误,请相应地设置首选项。这样,如果您不需要版本验证标记,就不会被它们淹没,而是可以看到您感兴趣的标记,并具有您选择的严重级别。

升级到新版本

验证您在项目中使用的版本只是第一步。下一步,您可能需要将您的项目实际升级到这些新版本。这时就该使用新的实验性升级支持了。

您的编码环境中的快速修复将在这些版本验证标记处显示,让您能够直接升级到这些新版本——无论这是新的补丁、次要还是主要版本。

对于新的补丁版本,这些快速修复只会更新您构建文件中的 Spring Boot 父版本,而不会做其他任何事情。

对于新的次要或主要版本,工具不仅会更新您的 Spring Boot 父版本。快速修复会执行完整的升级配方,自动为您完成许多必要的更改——例如,包括代码更改、更新到新的属性键、将所有内容迁移到新的 Jakarta 软件包等等。

这并不能保证完成升级项目所需的所有工作。但它为您处理了许多必要的更改并实现了自动化,这样您就不必手动完成它们。因此,它的目的是帮助您升级项目,而不是保证它能完成所有工作。

一旦调用,快速修复操作将在后台运行,并将所有必要的更改直接应用于项目文件。目前还没有一个对话框会询问是否真的要将这些更改应用于项目。因此,我们建议您在本地 git 存储库中保留项目的某个版本,并且在快速修复操作完成后,使用各种 git 工具来检查所做的更改,然后再提交它们。

更精细化的控制

除了版本验证的快速修复之外,该工具还允许您通过菜单或命令面板项直接执行这些升级。这种按需执行升级配方的好处是,它以一种 nice 的方式提供和解释所有详细的步骤和将要执行的更改。它甚至允许您包含或排除特定的步骤——以防您不希望工具自动升级某些部分。

局限性

目前,当为项目应用升级配方时,Gradle 构建文件尚不支持。虽然版本验证适用于基于 Gradle 的项目以及自动化升级配方的许多部分,但修改 build.gradle 文件本身尚不支持,但这在未来的版本路线图中。

在编码环境之外进行升级

有时您可能不想在编码环境中运行所有这些项目升级,您可能有很多项目需要连续升级,或者您希望通过更多文档和分步解释来指导升级过程。这时实验性的 Spring Boot Migrator 项目 就派上用场了。

与在编码环境中直接执行配方作为重构以自动化版本升级的繁琐任务不同,Spring Boot Migrator 通过创建详细的 HTML 报告,提供了一种更全面的项目升级方法。该报告包含并描述了您需要遵循的所有步骤,以将项目从 Spring Boot 2.7 升级到 Spring Boot 3.0——无论这些步骤是否可以自动化。对于可以自动化的步骤,报告允许用户直接执行相应的配方以自动应用更改。对于不能自动化的步骤,报告为用户提供了如何修复所需更改的指南。

这使得开发人员无需查找和阅读所有可能适用于他们应用程序的 Spring 和 Spring Boot 项目的不同发行说明。

此外,Spring Boot Migrator 项目还提供了一组额外的功能(例如用于扫描项目的 shell 应用程序,支持将 JEE 应用程序转换为 Spring Boot,将 Mule 定义转换为 Spring Integration 等)。

幕后:OpenRewrite

在 Spring Boot 升级的幕后,这些工具使用 OpenRewrite 项目 作为基础,特别是 rewrite-spring 模块,其中包含了所有自动源代码更改的实现,这些更改由这些升级配方执行。因此,如果您想了解更多幕后细节,请随时查看。

展望

升级配方远未完成所有工作,我们将在未来版本中对其进行增强。如果您有任何建议、反馈或功能请求,请通过以下方式联系并与我们分享:https://github.com/spring-projects/sts4/issues/

资源

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有