你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Java 的 Azure Migrate 应用程序和代码评估
本指南介绍如何使用适用于 Java 的 Azure Migrate 应用程序和代码评估工具来评估和重新格式化任何类型的 Java 应用程序。 借助该工具,可以评估应用程序准备情况,以便进行重新平台化并迁移到 Azure。 此工具是作为 CLI(命令行接口)提供的,用于评估 Java 应用程序二进制文件和源代码,以确定 Azure 的重新平台化和迁移机会。 它通过识别常见用例和代码模式,并提供建议的更改,帮助实现大规模 Java 应用程序的现代化和重新平台化。
该工具会通过静态代码分析发现应用程序技术使用情况,提供工作量估算,并加速代码重新平台化,帮助确定将 Java 应用程序移动到 Azure 的优先级并执行迁移。 它可以通过一组引擎和规则发现和评估不同的技术,如 Java 11、Java 17、Jakarta EE、Spring、Hibernate、Java Message Service (JMS) 等。 然后,它可帮助你将 Java 应用程序重新平台化到不同的 Azure 目标(Azure 应用程序服务、Azure Kubernetes 服务和 Azure 容器应用),并采用特定的 Azure 重新平台化规则。
该工具为开放源代码且基于 WindUp,这是一个由 Red Hat 创建并发布在 Eclipse 公共许可证下的项目。
概述
该工具旨在帮助组织以降低成本并加快创新速度的方式实现 Java 应用程序的现代化。 该工具使用高级分析技术来了解任何 Java 应用程序的结构和依赖项,并提供有关如何重构应用程序并将其迁移到 Azure 的指导。
使用该工具,可执行以下任务:
- 发现技术使用情况:快速了解应用程序使用哪些技术。 如果有包含很少文档的旧应用程序,并且想知道它们使用了哪些技术,发现功能将非常有用。
- 将代码评估到特定目标:评估特定 Azure 目标的应用程序。 检查必须执行的工作量和修改,以便将应用程序重新平台化到 Azure。
支持的目标
该工具包含用于帮助重新平台化应用程序的规则,以便可以部署到并使用不同的 Azure 服务。
Azure Migrate 应用程序和代码评估使用的规则根据目标进行分组。 目标是应用程序运行的位置或方式,以及常规需求和期望。 评估应用程序时,可以选择多个目标。 下表对可用目标进行了介绍:
目标 | 说明 | ID |
---|---|---|
Azure 应用程序服务 | 部署应用到 Azure 应用程序服务的最佳做法。 | azure-appservice |
Azure Kubernetes 服务 | 部署应用到 Azure Kubernetes 服务的最佳做法。 | azure-aks |
Azure Container Apps | 部署应用到 Azure 容器应用的最佳做法。 | azure-container-apps |
云就绪 | 使应用程序云 (Azure) 准备就绪的一般最佳做法。 | cloud-readiness |
发现 | 标识库和框架等技术使用情况。 | discovery |
Linux | 使应用程序 Linux 准备就绪的一般最佳做法。 | linux |
OpenJDK 11 | 使用 Java 11 运行 Java 8 应用程序的一般最佳做法。 | openjdk11 |
OpenJDK 17 | 使用 Java 17 运行 Java 11 应用程序的一般最佳做法。 | openjdk17 |
OpenJDK 21 | 使用 Java 21 运行 Java 17 应用程序的一般最佳做法。 | openjdk21 |
当该工具评估云就绪和相关 Azure 服务时,它还可以报告有关不同 Azure 服务的潜在使用情况的有用信息。 以下列表显示了涵盖的一些服务:
- Azure 数据库
- Azure 服务总线
- Azure 存储
- Azure 内容分发网络
- Azure 事件中心
- Azure Key Vault
- Azure Front Door
下载
若要使用 appcat
CLI,必须下载下一部分所述的 ZIP 文件,并且计算机上安装有兼容的 JDK 11 或 JDK 17。 appcat
CLI 可在任何与 Java 兼容的环境(如 Windows、Linux 或 Mac)上运行,同时也支持 Intel、Arm 和 Apple Silicon 硬件。 建议使用 Microsoft 版 OpenJDK。
下载适用于 Java 6.3.0.9 的 Azure Migrate 应用程序和代码评估。 更新时间:2024 年 8 月 6 日。
已知问题
分析特定 Lambda 表达式时,可能无法触发某些规则。 有关详细信息,请参阅相应 GitHub 问题。
在具有复杂双字节字符的非 unicode 环境中运行 appcat
将导致损坏。 如需了解应变方法,请参阅相应 GitHub 问题。
以前的版本
以下早期版本也可供下载:
- 适用于 Java 6.3.0.8 的 Azure Migrate 应用程序和代码评估。 发布时间:2024 年 3 月。
- 适用于 Java 6.3.0.7 的 Azure Migrate 应用程序和代码评估。 发布时间:2023 年 11 月。
开始使用
若要运行 appcat
,请确保已安装受支持的 JDK。 该工具支持以下 JDK:
- Microsoft Build of OpenJDK 11
- Microsoft Build of OpenJDK 17
- Eclipse Temurin™ JDK 11
- Eclipse Temurin™ JDK 17
安装有效的 JDK 后,请确保在 JAVA_HOME
环境变量中正确配置其安装目录。
若要继续,请下载包并将其解压缩到所选的文件夹中。 然后获取以下目录结构:
appcat-cli-<version> # APPCAT_HOME
├── README.md
├── bin
│ ├── appcat
│ └── appcat.bat
├── docs
│ └── appcat-guide.html
└── samples
├── airsonic.war
├── run-assessment
├── run-assessment-custom-rules
├── run-assessment-exclude-packages
├── run-assessment-no-code-report
├── run-assessment-openjdk21
├── run-assessment-zip-report
└── run-discovery
- docs:此目录包含
appcat
的文档。 - bin:此目录包含
appcat
CLI 可执行文件(适用于 Windows/Linux/Mac)。 - 示例:此目录包含一个示例应用程序和多个脚本,用于针对示例应用程序运行
appcat
。
若要运行该工具,请打开终端会话,并从 $APPCAT_HOME/bin 目录中键入以下命令:
./appcat --help
若要从计算机中的任何位置运行该工具,请将目录 $APPCAT_HOME/bin 配置为 PATH
环境变量,然后重启终端会话。
文档
以下指南提供了适用于 appcat
的 Java 的主要文档:
在不考虑 Azure 服务的情况下,发现技术使用情况和云就绪情况
发现技术和云就绪目标有助于深入了解应用程序的重新平台化以及迁移到云的现代化改造。 该工具会扫描应用程序及其组件,全面了解其结构、体系结构和依赖项。 它还会发现在云环境中可能具有挑战性的潜在问题。 特别是 discovery
目标用于创建应用程序及其组件的详细清单。 此清单是进一步分析和规划的基础。 有关详细信息,请参阅发现报告部分。
使用以下命令启动发现和云就绪:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target discovery cloud-readiness
当你还没有决定要将应用程序部署到哪一种具体的 Azure 服务时,这种类型的报告非常有用。
该工具始终执行 discovery
,而无论你是否在 --target
参数中包括了该值。
评估 Java 应用程序
评估阶段中,appcat
CLI 会分析应用程序及其组件,以确定其适合重新平台化,并确定任何潜在的挑战或限制。 此阶段涉及分析应用程序代码并检查其对所选目标的符合性。
可以使用带空格分隔的值列表和 --target
参数来选择多个目标。
若要检查可用的目标,请运行以下命令:
./appcat --listTargetTechnologies
此命令会生成类似于以下示例的输出:
Available target technologies:
azure-aks
azure-appservice
azure-container-apps
cloud-readiness
discovery
linux
openjdk11
openjdk17
openjdk21
然后,可以使用其中一个可用的目标或其组合运行 appcat
,如以下示例所示:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target cloud-readiness linux azure-appservice
还可以使用其中一个可用的 OpenJDK 目标运行 appcat
,如以下示例所示:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target openjdk11
对于 OpenJDK (Java) 目标,建议一次只选择一个。
Azure 评估目标建议
每当评估 Azure 部署的应用程序时,建议从以下目标开始:
discovery
cloud-readiness
此外,请指定用于部署的 Azure 服务,例如 azure-appservice
或 azure-container-apps
。
如果打算将应用程序从 Windows 环境移动到 Linux VM 或容器中,建议另外添加 linux
目标。
如果打算将应用程序从旧版 JDK 移动到较新版本,我们建议选择下一个主要版本,而不是应用程序正在使用的上一个版本。 例如,当应用程序当前使用 Java 8 进行部署时,请使用 openjdk11
。
从 appcat 获取结果
发现和评估阶段的结果是一份详细的报告,提供 Java 应用程序的重新平台化和现代化路线图,包括针对 Azure 服务和重新平台化方法的建议。 该报告是重新平台化过程的下一阶段的基础。 它可帮助组织了解此类转换所需的工作量,并做出有关如何实现应用程序现代化以获得最大好处的决定。
由 appcat
生成的报告全面概述了应用程序及其组件。 可以使用此报表来深入了解应用程序的结构和依赖项,并确定其是否适合进行重新平台化和现代化。
以下各节介绍了有关该报告的详细信息。
分析摘要
报告的登陆页面列出了应用程序中使用的所有技术。 仪表板提供分析摘要,其中包括转换事件数、事件类别或故事点。
放大“按类别划分的事件”饼图,可以看到按类别划分的事件数量:必需、可选、潜在和信息。
仪表板还会显示故事点。 故事点是敏捷软件开发中常用的抽象指标,用于估算实现功能或更改所需的工作量级别。 appcat
使用故事点来表达迁移特定应用程序所需的工作量级别。 故事点不一定会转换为工作时间,但该值应在任务之间保持一致。
发现报告
发现报告是在发现阶段生成的报告。 它显示应用程序在“信息”类别中使用的技术列表。 此报告只是告知你 appcat
发现的技术使用情况。
评估报告
评估报告概述了将应用程序迁移到 Azure 时需要解决的转换问题。
这些问题(也称为事件)具有严重性(必需、可选、潜在或信息)、工作量级别,以及指示故事点的数字。 故事点数通过计算事件数量乘以解决问题所需的工作量来确定。
特定问题的详细信息
对于每个事件,只需选中它即可获取详细信息(问题详细信息、规则内容等)。 还可以获取受此事件影响的所有文件的列表。
然后,对于受事件影响的每个文件或类,可以跳转到源代码中,以突出显示产生问题的代码行。
自定义规则
你可以将 appcat
视为规则引擎。 它使用规则从 Java 存档中提取文件、反向编译 Java 类、对文件类型进行扫描和分类、分析这些文件并生成报告。 在 appcat
中,规则以规则集的形式定义。 规则集是单个规则的集合,这些规则定义 appcat
可在分析期间检测到的特定问题或模式。
这些规则在 XML 中定义,并使用以下规则模式:
when (condition)
perform (action)
otherwise (action)
appcat
提供一组全面的标准迁移规则。 由于应用程序可能包含自定义库或组件,因此 appcat
让你可以编写自己的规则,来标识现有规则集可能涵盖的组件或软件的使用。
若要编写自定义规则,请使用以 XML 表示的丰富域特定语言 (DLS)。 例如,假设你想要一个规则来标识 Java 应用程序中 PostgreSQL JDBC 驱动程序的使用,并建议改用 Azure PostgreSQL 灵活服务器。 需要一个规则来查找 Maven pom.xml 文件或 Gradle 文件中定义的 PostgreSQL JDBC 驱动程序,例如以下示例所示的依赖项:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
为了检测此依赖项的使用,规则会使用以下 XML 标记:
ruleset
:规则集的唯一标识符。 规则集是与特定技术相关的一个规则集合。targetTechnology
:规则所面向的技术。 在这种情况下,该规则面向 Azure 应用程序服务、Azure Kubernetes 服务 (AKS) 和 Azure 容器应用。rule
:单个规则的根元素。when
:触发规则必须满足的条件。perform
:触发规则时要执行的操作。hint
:报告中会显示的信息,其类别(信息、可选或必需)以及解决问题所需的工作量,范围为从 1(易)到 13(困难)。
以下 XML 显示了自定义规则定义:
<ruleset id="azure-postgre-flexible-server"
xmlns="http://windup.jboss.org/schema/jboss-ruleset"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
<metadata>
<description>Recommend Azure PostgreSQL Flexible Server.</description>
<dependencies>
<addon id="org.jboss.windup.rules,windup-rules-xml,3.0.0.Final"/>
</dependencies>
<targetTechnology id="azure-appservice"/>
<targetTechnology id="azure-aks"/>
<targetTechnology id="azure-container-apps"/>
</metadata>
<rules>
<rule id="azure-postgre-flexible-server">
<when>
<project>
<artifact groupId="org.postgresql" artifactId="postgresql"/>
</project>
</when>
<perform>
<hint title="Azure PostgreSQL Flexible Server" category-id="mandatory" effort="7">
<message>The application uses PostgreSQL. It is recommended to use Azure PostgreSQL Flexible Server instead.</message>
<link title="Azure PostgreSQL Flexible Server documentation" href="https://learn.microsoft.com/azure/postgresql/flexible-server/overview"/>
</hint>
</perform>
</rule>
</rules>
</ruleset>
通过 appcat
执行此规则后,重新运行分析以查看生成的报告。 与其他事件一样,评估报告列出了与此规则相关的已识别问题和受影响的文件。
azure.github.io/appcat-docs/rules-development-guide 提供了规则开发的完整指南。
发行说明
6.3.0.9
此版本包含以下修复以及一组新规则。 有关详细信息,请参阅。
- 解决了
localhost-java-00001
规则的问题。 - 引入了用于识别 AWS S3、AWS SQS、阿里巴巴云 OSS、阿里巴巴云短信、阿里巴巴计划程序 X、阿里巴巴云 Seata 和阿里巴巴 Rocket MQ 等技术的新规则。
- 对
azure-file-system-02000
进行了更新,现在支持 xml 文件扩展名。 - 升级了各种库以解决安全漏洞。
6.3.0.8
之前,默认启用了一组目标,增加了某些客户在评估大型应用程序时的难度,其中包含了很多与不太重要的问题相关的事件。 为了减少报告中的干扰,用户现在必须使用参数 --target
来指定多个目标,这样做就可以在执行 appcat
时使用户可以仅选择重要的目标。
6.3.0.7
正式发布 Azure Migrate 应用程序和代码评估。
许可证
适用于 Java 的 Azure Migrate 应用程序和代码评估是免费的开源工具,并且根据与上游 WindUp 项目相同的许可证获得许可。
常见问题解答
问:可从何处下载最新版本的 Azure Migrate 应用程序和 Java 代码评估?
可以从 aka.ms/appcat/azure-appcat-cli-latest.zip 下载 appcat
。
问:在哪里可以找到有关适用于 Java 的 Azure Migrate 应用程序和代码评估的详细信息?
下载 appcat
时,会获取包含入门所需的所有信息的文档目录。
问:在哪里可以找到特定的 Azure 规则?
Appcat 规则集 GitHub 存储库中提供了所有 Azure 规则。
问:在哪里可以找到有关创建自定义规则的详细信息?
请参阅适用于 Java 的 Azure Migrate 应用程序和代码评估的规则开发指南。
问:创建自定义规则时,我在哪里可以获得一些帮助?
获取帮助的最佳方式是在 appcat 规则集 GitHub 存储库上创建问题。