你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 Java 的 Azure Migrate 应用程序和代码评估

本指南介绍如何使用适用于 Java 的 Azure Migrate 应用程序和代码评估工具来评估和重新格式化任何类型的 Java 应用程序。 借助该工具,可以评估应用程序准备情况,以便进行重新平台化并迁移到 Azure。

appcat 是 Azure Migrate 的命令行工具,用于评估 Java 应用程序二进制文件和源代码,以确定 Azure 的重新平台化和迁移机会。 它通过识别常见用例和代码模式,并提供建议的更改,帮助实现大规模 Java 应用程序的现代化和重新平台化。

appcat 会通过静态代码分析发现应用程序技术使用情况,支持工作量估算,并加速代码重新平台化,帮助将 Java 应用程序移动到 Azure。 通过一组引擎和规则,它可以发现和评估不同的技术,如 Java 11、Java 17、Jakarta EE 10、Quarkus、Spring 等。 然后,它可帮助你将 Java 应用程序重新平台化到不同的 Azure 目标(Azure 应用服务、Azure Kubernetes 服务、Azure 容器应用和 Azure Spring Apps),并采用特定的 Azure 重新平台化规则。

appcat 是开源的,基于 WindUp,一个由 Red Hat 创建并发布在 Eclipse 公共许可证下的项目。

何时应使用 Azure Migrate 应用程序和代码评估?

appcat 旨在帮助组织以降低成本并加快创新速度的方式实现 Java 应用程序的现代化。 该工具使用高级分析技术来了解任何 Java 应用程序的结构和依赖项,并提供有关如何重构应用程序并将其迁移到 Azure 的指导。

凭借 appcat,可以执行以下任务:

  • 发现技术使用情况:快速了解应用程序使用哪些技术。 如果有包含很少文档的旧应用程序,并且想知道它们使用了哪些技术,发现功能将非常有用。
  • 将代码评估到特定目标:评估特定 Azure 目标的应用程序。 检查必须执行的工作量和修改,以便将应用程序重新平台化到 Azure。

支持的 Azure 目标

该工具包含用于帮助重新平台化应用程序的规则,以便可以部署到并使用以下 Azure 服务。

可以将以下服务用作部署目标:

  • Azure 应用服务
  • Azure Spring Apps
  • Azure Kubernetes 服务
  • Azure Container Apps
  • cloud-readiness
  • 发现
  • Linux
  • openjdk11
  • openjdk17
  • openjdk21

可以将以下服务用作资源服务:

  • Azure 数据库
  • Azure 服务总线
  • Azure 存储
  • Azure CDN
  • Azure 事件中心
  • Azure Key Vault

使用适用于 Java 的 Azure Migrate 应用程序和代码评估

若要使用 appcat,必须下载下一部分所述的 ZIP 文件,并在计算机上具有兼容的 JDK 11+ 安装。 appcat 在适用于 Intel、Arm 和 Apple Silicon 硬件的 Windows、Linux 或 Mac 上运行。 可以使用 Microsoft Build of OpenJDK 运行 appcat

下载

可从 aka.ms/appcat/azure-appcat-cli-latest.zipappcat CLI 下载为 ZIP 文件。

运行 appcat

在所选文件夹中解压缩 zip 文件。 然后获取以下目录结构:

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 目标的情况下发现技术使用情况

发现技术是应用程序重新平台化和现代化的第一阶段。 在发现阶段,appcat 会扫描应用程序及其组件,全面了解其结构、体系结构和依赖项。 此信息用于创建应用程序及其组件的详细清单(请参阅发现报告部分),作为进一步分析和规划的基础。

使用以下命令启动发现:

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target discovery

当没有特定的 Azure 目标时,发现阶段非常有用。 否则,appcat 会隐式运行任何 Azure 目标的发现。

评估特定目标的 Java 应用程序

评估阶段中,appcat 会分析应用程序及其组件,以确定其适合重新平台化,并确定任何潜在的挑战或限制。 此阶段涉及分析应用程序代码并检查其对所选 Azure 目标或 OpenJDK 目标的符合性。

若要检查可用的目标,请运行以下命令:

./appcat --listTargetTechnologies

此命令会生成类似于以下示例的输出:

Available target technologies:
    azure-aks
    azure-appservice
    azure-container-apps
    azure-spring-apps
    cloud-readiness
    discovery
    linux
    openjdk11
    openjdk17
    openjdk21

然后,可以使用其中一个可用的 Azure 目标运行 appcat,如以下示例所示:

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target azure-appservice

可以使用其中一个可用的 OpenJDK 目标运行 appcat,如以下示例所示:

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target openjdk11

从 appcat 获取结果

发现和评估阶段的结果是一份详细的报告,提供 Java 应用程序的重新平台化和现代化路线图,包括针对 Azure 服务和重新平台化方法的建议。 该报告是重新平台化过程的下一阶段的基础。 它可帮助组织了解此类转换所需的工作量,并做出有关如何实现应用程序现代化以获得最大好处的决定。

appcat 生成的报告全面概述了应用程序及其组件。 可以使用此报表来深入了解应用程序的结构和依赖项,并确定其是否适合进行重新平台化和现代化。

以下各节介绍了有关该报告的详细信息。

分析摘要

报告的登陆页面列出了应用程序中使用的所有技术。 仪表板提供分析摘要,其中包括转换事件数、事件类别或故事点。

appcat 摘要报表的屏幕截图。

放大“按类别划分的事件”饼图,可以看到按类别划分的事件数量:必需可选潜在信息

仪表板还会显示故事点。 故事点是敏捷软件开发中常用的抽象指标,用于估算实现功能或更改所需的工作量级别。 appcat 使用故事点来表达迁移特定应用程序所需的工作量级别。 故事点不一定会转换为工作时间,但该值应在任务之间保持一致。

AppCAT 摘要事件报告的屏幕截图。

发现报告

发现报告是在发现阶段生成的报告。 它显示应用程序在“信息”类别中使用的技术列表。 此报告只是告知你 appcat 发现的技术。

appcat 发现报告的屏幕截图。

评估报告

评估报告概述了将应用程序迁移到 Azure 时需要解决的转换问题。

这些问题(也称为事件)具有严重性(必需可选潜在信息)、工作量级别,以及指示故事点的数字。 故事点数通过计算事件数量乘以解决问题所需的工作量来确定。

AppCAT 评估报告的屏幕截图。

特定问题的详细信息

对于每个事件,只需选中它即可获取详细信息(问题详细信息、规则内容等)。 还可以获取受此事件影响的所有文件的列表。

AppCAT 问题详细信息报告的屏幕截图。

然后,对于受事件影响的每个文件或类,可以跳转到源代码中,以突出显示产生问题的代码行。

AppCAT 问题代码报告的屏幕截图。

自定义规则

你可以将 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 Spring Apps 和 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"/>
        <targetTechnology id="azure-spring-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 执行此规则后,重新运行分析以查看生成的报告。 与其他事件一样,评估报告列出了与此规则相关的已识别问题和受影响的文件。

正在执行规则的 appcat 的屏幕截图。

azure.github.io/appcat-docs/rules-development-guide 提供了规则开发的完整指南。

许可证

适用于 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 存储库上创建问题

后续步骤