亚马逊AWS官方博客

使用 AWS Transform Custom轻松完成 Java 应用升级

摘要:本文将介绍 AWS Transform Custom 的核心能力,并通过 Spring PetClinic 官方示例项目,演示如何将一个 Java 8 应用升级到 Java 17。


1. 引言

Java 是全球企业级应用开发中使用最广泛的编程语言之一。然而,随着 Java 版本的快速迭代(从 Java 8 到 Java 21),大量企业仍在运行基于旧版本 JDK 的应用。这些”技术债务”不仅带来安全风险,还限制了团队采用新特性和提升性能的能力。

传统的 Java 版本升级是一项耗时且风险较高的工程——需要逐一排查依赖兼容性、修改废弃 API 调用、适配框架变更,并进行全面的回归测试。对于拥有数十甚至上百个 Java 微服务的企业来说,手动升级几乎不可能在合理的时间和成本内完成。

AWS Transform Custom 正是为解决这一痛点而生。它利用 Agentic AI 技术,能够自动分析代码、制定升级计划、执行代码变更并验证结果,将原本需要数周甚至数月的升级工作缩短到数小时。本文将介绍 AWS Transform Custom 的核心能力,并通过 Spring PetClinic 官方示例项目,演示如何将一个 Java 8 应用升级到 Java 17。

2. Java 应用升级的核心挑战

2.1 错综复杂的依赖关系

一个典型的企业级 Java 应用往往依赖数十甚至上百个第三方库。当目标 JDK 版本发生变化时,这些依赖可能面临以下问题:

  • 直接不兼容:某些库的旧版本无法在新 JDK 上编译或运行,例如使用了被移除的 javax.* 包的库在 Java 17 上会直接报错。
  • 传递依赖冲突:升级一个库可能引发其传递依赖的版本冲突,形成”依赖地狱”。
  • 框架级别的 Breaking Change:如 Spring Boot 2.x 到 3.x 的升级涉及从 javax 到 jakarta 命名空间的全面迁移,影响范围极广。
  • 构建工具兼容性:Maven 插件、Gradle 插件也可能需要同步升级才能支持新版 JDK。

手动梳理这些依赖关系并找到兼容的版本组合,往往是升级过程中最耗时的环节。

2.2 大量陈旧应用,无法大规模升级

许多企业面临的不是”一个应用的升级”,而是”几十上百个应用的批量升级”。这带来了额外的挑战:

  • 人力瓶颈:每个应用都需要熟悉其业务逻辑的开发人员参与,而这些人员通常还有日常的功能开发任务。
  • 知识断层:部分老旧应用的原始开发人员已经离职,缺乏文档和上下文,新团队成员难以快速理解代码。
  • 测试覆盖不足:许多遗留应用缺乏完善的单元测试和集成测试,升级后难以验证功能的正确性。
  • 优先级冲突:业务部门更关注新功能交付,技术债务的清理往往被一再推迟。

这些因素叠加在一起,使得大规模 Java 升级成为一个看似简单、实则极其复杂的系统工程。

3. 什么是 AWS Transform Custom

AWS Transform Custom 是 AWS 推出的一项基于 Agentic AI 的代码现代化服务,专注于大规模软件转换和技术债务消除。

3.1 核心能力

能力 说明
自然语言驱动 通过自然语言描述转换需求,无需编写复杂的转换规则
多语言支持 支持 Java、Python、Node.js 等主流语言的版本升级
AWS 托管转换 提供经过 AWS 验证的预置转换模板,开箱即用
自定义转换 支持定义组织特定的转换逻辑,满足个性化需求
持续学习 Agent 从每次执行和开发者反馈中持续改进转换质量
大规模执行 支持批量模式,可跨数百个代码仓库并行执行转换

3.2 支持的转换模式

AWS Transform Custom 支持多种转换模式:

  • 语言版本升级:如 Java 8→17、Python 3.9→3.13、Node.js 12→22
  • API 和服务迁移:如 AWS SDK v1→v2、JUnit 4→5、javax→jakarta
  • 框架升级:如 Spring Boot 2.x→3.x、React 17→18
  • 框架迁移:如 Angular→React
  • 代码分析:全面的代码库静态分析和文档生成

3.3 使用方式

AWS Transform Custom 提供两种使用方式:

  1. 交互模式(Interactive):通过 CLI 工具 atx 启动交互式会话,与 Agent 对话式地完成转换。适合单个项目的精细化升级。
  2. 非交互模式(Non-Interactive):通过命令行参数批量执行,适合大规模自动化场景。可集成到 CI/CD 流水线中。

4. AWS Transform Custom和Kiro的区别

Kiro 是一款通用型 AI 编程助手,旨在为开发者提供全流程的开发支持,涵盖代码编写、调试、重构、架构分析及技术咨询等多种场景。其核心优势在于通过自然语言对话与开发者进行实时协作,并可直接与本地开发环境交互。

Amazon Transform Custom专注于大规模、自动化的代码转换任务。其典型应用场景包括编程语言版本升级(如 Java 8 至 Java 17)、框架迁移(如 Spring Boot 2 至 Spring Boot 3)以及基于自定义规则的批量代码重构。

对比维度 Kiro Amazon Transform Custom
产品性质 通用型 AI 编程助手 专项代码转换工具
交互模式 对话式实时交互,支持逐步协作 预定义转换规则后批量自动执行
适用范围 覆盖软件开发全生命周期 聚焦于代码迁移与升级任务
处理规模 适合单文件或小范围的精细化操作 适合跨项目、大批量的系统性转换
自定义方式 通过自然语言对话随时调整需求 通过编写转换规则进行配置
执行特点 交互式、渐进式 自动化、批量化

5. AWS Transform 的升级流程

使用 AWS Transform Custom 进行 Java 应用升级,遵循以下标准化流程:

步骤一:确认升级要求

明确升级的源版本和目标版本(如 Java 8 → Java 17),以及需要同步升级的框架(如 Spring Boot 2.x → 3.x)。同时确认项目的构建工具(Maven/Gradle)和构建命令。

步骤二:粗读代码

AWS Transform Agent 首先对代码库进行初步扫描,识别项目结构、依赖关系、使用的框架和 API。这一步帮助 Agent 建立对项目的整体理解。

步骤三:制定初步升级计划

基于初步扫描结果,Agent 生成一份升级计划,列出需要变更的依赖版本、需要替换的废弃 API、需要迁移的命名空间等。

步骤四:全面 Review 代码

Agent 深入分析每个源文件,识别所有与目标版本不兼容的代码模式,包括:

  • 废弃的 API 调用
  • 不兼容的语法特性
  • 需要更新的注解和配置
  • 测试代码中的兼容性问题

步骤五:修改升级计划

根据全面 Review 的结果,Agent 调整和完善升级计划,确保覆盖所有需要变更的点。

步骤六:开始升级

Agent 按照升级计划逐步执行代码变更:

  • 更新 pom.xml 或 build.gradle 中的依赖版本
  • 替换废弃的 API 调用为新版本等效实现
  • 迁移命名空间(如 javax.* → jakarta.*)
  • 更新配置文件以适配新版本

5.7 步骤七:测试验证

Agent 执行项目的构建命令和测试套件,验证升级后的代码能够正确编译和通过测试。如果发现问题,Agent 会自动修复并重新验证。

5.8 步骤八:完成升级报告及升级日志

升级完成后,Agent 生成详细的变更报告,包括:

  • 所有修改文件的 diff
  • 升级的依赖版本清单
  • 解决的兼容性问题列表
  • 构建和测试结果摘要

6. 演示:使用 AWS Transform 升级 Spring PetClinic

本节以 Spring 官方示例项目 spring-petclinic 为例,演示如何使用 AWS Transform Custom 将一个 Java 8 + Spring Boot 2.x 应用升级到 Java 17 + Spring Boot 3.x。

6.1 环境准备

1). 安装atx-cli:

本案例采用Amazon Linux 2023 ARM64版本操作系统

# 添加nodejs 20仓库
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
# 安装nodejs 确保版本在20以上
sudo dnf install -y nodejs
#安装git
sudo dnf install git
# 安装 atx CLI
curl -fsSL https://transform-cli.awsstatic.com/install.sh | bash

# 验证安装
atx --version

2). 克隆 Spring PetClinic 项目(使用基于 Java 8 的历史版本):

git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic
git checkout efficient-webjars

6.2 启动交互式升级

在项目根目录下启动 AWS Transform:

atx

在交互式会话中,向 Agent 描述升级需求:

> 请将这个 Java 8 + Spring Boot 2.x 项目升级到 Java 17 + Spring Boot 3.x

并且告知项目的构建命令:

> ./mvnw package

6.3 Agent 执行过程

Agent 将以交互式的方式执行以下操作:

1) 代码分析

2) 粗读代码生成初步升级计划

3) 全面review代码,完善升级计划

4) 执行升级

Agent会按步升级计划,并且在每步完成之后都会调用构建命令构建代码,以确保构建无误。构建完成后还会commit当前修改。

5) 记录工作日志和验证总结

6.4 查看升级日志

升级完成后,会生成升级工作日志,具体阐述在每个步骤中具体做了哪些升级:

7. 结语

Java 版本升级是企业技术现代化进程中不可回避的课题。传统的手动升级方式耗时长、风险高、难以规模化。AWS Transform Custom 通过 Agentic AI 技术,将这一复杂的工程问题转化为一个可自动化、可规模化、可持续改进的流程。

无论您是需要升级单个关键应用,还是需要在整个组织范围内批量消除技术债务,AWS Transform Custom 都能显著降低升级的时间和人力成本,同时保证升级质量。

7.1 相关资源

➡️ 下一步行动:

相关文章:

免责声明

本文中的示例代码和操作步骤仅供参考。在生产环境中使用 AWS Transform 前,请确保充分测试并遵循您组织的变更管理流程。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

邢悦

亚马逊云科技迁移解决方案架构师,主要负责企业上云跨云迁移相关的技术支持工作。在制造、保险、物流等行业拥有10多年的研发和架构设计经验。


AWS 架构师中心:云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用