随着应用程序的老化,要保证它们的安全和顺畅运行需要付出越来越多的努力。管理升级的开发人员必须花时间重新学习其他人在过去升级中已发现的重大变更和性能优化的复杂性和细微差别。因此,很难在新功能和基本维护工作之间取得平衡。
现在,我们将通过预览版介绍 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation。这项新功能使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail)(一种由生成式 AI 驱动的新型助手)简化了现有应用程序代码的升级和现代化。[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) 专为工作而设计,可根据您的业务进行量身定制。
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 现在可以执行 Java 应用程序升级,从版本 8 和 11 升级到版本 17(Java 长期支持(LTS)版本),并且它很快就能将基于 Windows 的 .NET Framework 应用程序转换为跨平台 .NET。
以前,开发人员可能需要两到三天的时间来升级每个应用程序。我们的内部测试表明,与手动升级通常需要的几天或几周时间相比,使用转换功能可在几分钟内升级应用程序,从而腾出时间专注于新的业务需求。例如,一个由五人组成的亚马逊云科技内部团队在2天内成功地将一千个生产应用程序从 Java 8 升级到了17。升级应用程序平均只需10分钟,最长的一次不到一个小时。
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 会自动分析现有代码、生成转换计划,并完成计划建议的转换任务。在此过程中,它会识别和更新包依赖项,重构过时和低效的代码组件,切换到新的语言框架并整合安全最佳实践。完成后,您可以查看转换后的代码以及构建和测试结果,然后再接受更改。
这样,您只需几步即可保持应用程序的更新并使其继续提供支持、获得性能优势,并消除因使用不支持的版本所产生的漏洞,从而腾出时间专注于新的业务需求。下面来看看这种新功能的实际应用。
**将 Java 应用程序从版本 8 升级到 17**
在本演示中,我使用的是 IntelliJ IDEA(同样可用于 Visual Studio Code)。若要在 IDE 中使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation,我需要安装最新版本的 Amazon Toolkit for IntelliJ IDEA,并使用我组织提供的 Amazon IAM Identity Center 凭证进行登录。请注意,若要使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation,则在组织使用的配置文件中,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 管理员需要明确授予对 Azamon Q 功能的访问权限。
我打开一个一直都没时间将其更新到 Java 最新版本的老项目。该项目使用 Apache Maven 来管理构建。项目对象模型(POM)文件( pom.xml )是项目的 XML 表示形式,位于根目录中。
首先,在项目设置中,我需要检查项目是否配置为使用正确的开发工具包版本(本例中为 1.8)。在左侧窗格中选择 **Amazon Toolkit**,然后选择 **[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) + CodeWhisperer** 选项卡。在 **[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail)(预览版**)部分,选择**转换**。
![image.png](https://dev-media.amazoncloud.cn/c5df93dc7b904f09850b8302b7abb6b9_image.png "image.png")
这将打开一个对话框,我可以在继续转换前在这里检查是否选择了正确的 Maven 模块进行升级。
![image.png](https://dev-media.amazoncloud.cn/da18791b34644fcb9b74161458b50935_image.png "image.png")
我可以在**转换中心**窗口中跟踪进度。小型应用程序的升级将在几分钟内完成,而大型应用程序可能需要一个多小时才能完成。
端到端应用程序升级包括三步:
1. **识别和分析应用程序** – 将代码复制到云中的托管环境中,并根据存储库中的说明设置构建流程。在此阶段,将确定要升级的组件。
2. **创建转换计划** – 分析代码以创建转换计划,其中会列出 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 升级代码的步骤,包括更新依赖项、构建升级后的代码,以及以迭代方式修复升级期间遇到的任何构建错误。
3. **代码生成、构建测试和最终确定** – 按照转换计划反复更新现有代码和配置文件,在需要时生成新文件,使用随代码提供的测试执行构建验证,并修复在失败的构建中发现的问题。
![image.png](https://dev-media.amazoncloud.cn/375340f94eba4ed4b673bee5a553584b_image.png "image.png")
几分钟后,转换成功完成。在这里,我可以打开计划和转换摘要。我可以选择查看差异来查看建议的更改。在应用补丁对话框中,可看到已添加、修改或删除的文件的摘要。
![image.png](https://dev-media.amazoncloud.cn/d7661521b23e40d0a05d16160f06e234_image.png "image.png")
首先,我选择 `pom.xml` 文件,然后选择显示差异(带有左右箭头的图标),以并排查看项目中的当前代码和建议的更改。例如,我看到其中一个依赖项(Project Lombok)的版本已经提高,以兼容目标 Java 版本。
![image.png](https://dev-media.amazoncloud.cn/ffdc824a74e647f59bc71df3ccdd6f7b_image.png "image.png")
在 Java 文件中,升级后的依赖项所使用的注释已更新。在新版本中, `@With` 已升级,并且 `@Wither` (处于实验阶段)已弃用。这些更改均体现在 `导入` 语句中。
![image.png](https://dev-media.amazoncloud.cn/4cb81ef7e1864c2fb3bd64544e2e58e4_image.png "image.png")
我还需要在代码库中保存一个摘要文件,用于快速查找为完成升级所做出的更改。
我需要花一些时间查看文件。然后,选择**确定**,接受所有更改。
现在,补丁已成功应用,建议的更改也已与代码合并。我将更改提交到存储库中,然后继续关注那些等待迁移完成的关键业务更改。
**注意事项**
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 预览版现已在 Amazon Toolkit for IntelliJ IDEA 和 Amazon Toolkit for Visual Studio Code 中向 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 专业套餐的客户开放。若要使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation,则在组织使用的配置文件中,CodeWhisperer 管理员需要授予相应的访问权限。
在预览版开放期间,使用 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 无需支付额外费用。您可以将使用 Apache Maven 构建的 Java 8 和 11 应用程序升级到 Java 17 版本。项目的根目录中必须要有 POM 文件( pom.xml )。我们很快就会添加一个选项,以将基于 Windows 的 .NET Framework 应用程序转换为跨平台 .NET,并帮助加快向 Linux 的迁移。
转换任务完成后,您可以使用差异视图来验证和接受建议的更改。最终的转换摘要详细列出了由 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 更新的依赖项和由其更改的代码文件。它还提供了在升级代码的最终构建过程中遇到的所有构建失败的详细信息,您可使用这些信息来修复问题并完成升级。
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 将亚马逊云科技在自动推理和静态代码分析方面的长期投资与生成式 AI 的强大功能相结合,并采用基础模型(我们发现这些模型对于上下文特定的代码转换至关重要),这些代码转换通常需要通过不向后兼容的更改来更新 Java 库。
除了由亚马逊云科技构建的基于生成式 AI 的代码转换外,[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 还使用了 OpenRewrite 的部分内容来进一步加速客户的 Java 升级。亚马逊云科技中的许多服务都是使用开源组件构建的,促进这些社区的长期可持续性对我们和我们的客户至关重要。这就是为什么我们必须要回馈 OpenRewrite 这样的社区,这有助于确保整个行业能继续从他们的创新中受益。亚马逊云科技计划将 OpenRewrite 配方和改进部分(是作为 [Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 的一部分而开发的)贡献给开放源代码。
“软件以更快的速度适应环境的能力是任何企业都可以拥有的最基本优势之一。这就是为什么我们很乐意看到亚马逊云科技将开源自动代码重构技术 OpenRewrite 作为其服务的一部分。”Moderne(OpenRewrite 的赞助商)的首席执行官兼联合创始人 Jonathan Schneider 说道。“我们很高兴亚马逊云科技加入 OpenRewrite 社区,并期待他们做出贡献,让迁移框架、修补漏洞和更新 API 变得更加容易。”
**立即升级您的 Java 应用程序**
[Amazon Q](https://aws.amazon.com/cn/q/?trk=cndc-detail) Code Transformation 产品页:
http://aws.amazon.com/q/aws/code-transformation?trk=cndc-detail
> 了解所有 re:Invent 2023 热门发布产品,请扫描下方二维码:
![image.png](https://dev-media.amazoncloud.cn/ad67cf6c07334e42adca9cba9cb96cb6_image.png "image.png")
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/ec185a1ede104731adcc5af82dffc46f_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")