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

适用于 Java 的 Azure Migrate 应用程序和代码评估版本 7(预览版)

注意

本文针对适用于 Java 的 Azure Migrate 应用程序和代码评估,版本 7.x。 此版本处于预览状态。 有关以前的稳定版本 6.x,请参阅适用于 Java 的 Azure Migrate 应用程序和代码评估

本文将展示如何使用适用于 Java 的 Azure Migrate 应用程序和代码评估工具来评估和替换任何类型的 Java 应用。 借助该工具,可以评估应用程序准备情况,以便进行重新平台化并迁移到 Azure。 此工具作为命令行接口 (CLI) 提供,可评估 Java 应用二进制文件和源代码,以确定 Azure 的重新搭建和迁移机会。 它通过识别常见用例和代码模式,并提供建议的更改,帮助实现大规模 Java 应用程序的现代化和重新平台化。

该工具会通过静态代码分析发现应用程序技术使用情况,提供工作量估算,并加速代码重新搭建。 此评估可帮助设置 Java 应用的优先级并将其迁移到 Azure。 通过一组引擎和规则,工具可以发现和评估不同的技术,如 Java 11、Java 17、Jakarta EE、Spring、Hibernate、Java 消息服务 (JMS) 等。 然后,该工具可帮助将 Java 应用重新搭建到不同的 Azure 目标(Azure 应用程序服务、Azure Kubernetes 服务和 Azure 容器应用),并采用特定的 Azure 重新搭建规则。

工具基于 Red Hat 创建和领导的云原生计算基金会项目 Konveyor 中的一组组件。

概述

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

使用该工具,可执行以下任务:

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

支持的目标

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

Azure Migrate 应用程序和代码评估使用的规则根据目标进行分组。 目标是应用程序运行的位置或方式,以及常规需求和期望。 评估应用程序时,可以选择多个目标。 下表对可用目标进行了介绍:

目标名称 说明 Target
Azure 应用程序服务 部署应用到 Azure 应用程序服务的最佳做法。 azure-appservice
Azure Kubernetes 服务 部署应用到 Azure Kubernetes 服务的最佳做法。 azure-aks
Azure Container Apps 部署应用到 Azure 容器应用的最佳做法。 azure-container-apps
云就绪 使应用程序云 (Azure) 准备就绪的一般最佳做法。 cloud-readiness
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,必须下载特定于环境的包,并在环境中具有所需的依赖项。 appcat CLI 可在任何环境下运行,如 Windows、Linux 或 Mac,使用 Intel、Arm 或 Apple Silicon 硬件。 对于 JDK 要求,建议使用 Microsoft Build of OpenJDK

操作系统 体系结构 下载链接 其他文件
x64
Windows x64 下载 sha256 / sig
macOS X64 下载 sha256 / sig
Linux X64 下载 sha256 / sig
AArch64
Windows AArch64 / ARM64 下载 sha256 / sig
macOS Apple Silicon 下载 sha256 / sig
Linux AArch64 / ARM64 下载 sha256 / sig

先决条件

安装

要安装 appcat,请下载适合平台的 zip 文件。 下载文件后,根据操作系统,应该找到 .tar.gz (Linux/macOS) 或 .zip 文件 (Windows)。

从下载的文件中提取二进制文件。 应该看到以下文件夹结构:

/azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/
├── appcat.exe (Windows) / appcat (Linux/macOS)
├── samples/
├── fernflower.jar
├── LICENSE
├── NOTICE.txt
├── maven.default.index
├── jdtls/
├── static-report/
├── rulesets/   
├── readme.md
└── readme.html

运行此工具

选项1:从下载的文件夹运行 appcat

将目录更改为提取的文件夹:

cd /azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/
./appcat --help

注意

appcat 二进制文件首先在当前目录中查找其依赖项,如果找不到,则返回到以下应用场景。

选项 2:将 appcat 二进制路径添加到 $PATH 中

将文件夹的内容移动到用户主目录中的 .appcat 文件夹 - Linux/Mac 上的 $HOME/.appcat 和 Windows 上的 %USERPROFILE%/.appcat

.appcat 文件夹添加到 PATH 环境变量中,这样就可以从终端中的任何文件夹运行工具。

mv <path-to-extracted>/azure-migrate-appcat-for-java-cli-<OS>-<architecture>-<release-version>-preview/ $HOME/.appcat

注意

在这种情况下,当从与安装位置不同的文件夹调用 appcat 二进制文件时,它会在用户主目录中的 .appcat 文件夹中查找其依赖项。

使用情况

子命令

AppCAT 提供了两个子命令供使用:

  • analyze:对输入源代码或二进制文件运行源代码分析。
  • transform:将以前版本(6 及更早版本)的 XML 规则转换为此版本使用的 YAML 格式。

注意

对于 macOS 用户:如果在尝试运行应用时遇到“Apple无法验证”的错误,可以使用以下命令解决此错误:

xattr -d -r com.apple.quarantine /path/to/appcat_binary

例如:

xattr -d -r com.apple.quarantine $HOME/.appcat/appcat

分析子命令

analyze 子命令允许运行源代码和二进制文件分析。

要分析应用源代码,请运行以下命令:

./appcat analyze --input=<path-to-source-code> --output=<path-to-output-directory> --target=azure-appservice --overwrite

--input 标志必须指向源代码目录或二进制文件,并且 --output 必须指向存储分析结果的目录。

有关分析标志的详细信息,请运行以下命令:

./appcat analyze --help

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

./appcat analyze --list-targets

该命令生成以下输出:

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

分析多个应用

AppCAT 旨在每次执行命令时分析单一应用,但如果使用 --bulk 选项,则可以在单一执行中分析多个应用。 此选项在输出目录中生成静态报告,其中包括所有应用的结果。

要分析多个应用,请运行以下命令:

./appcat analyze --bulk --input=<path-to-source-A> --output=<path-to-output-ABC> --target=<targetname>
./appcat analyze --bulk --input=<path-to-source-B> --output=<path-to-output-ABC> --target=<targetname>
./appcat analyze --bulk --input=<path-to-source-C> --output=<path-to-output-ABC> --target=<targetname>

转换子命令

transform 子命令允许将以前的 appcat XML 规则(6.x 版本中使用)转换为 7.x 版本使用的新 YAML 格式。

要转换规则,请运行以下命令:

./appcat transform rules --input=<path-to-xml-rules> --output=<path-to-output-directory>

--input 标志应指向包含 XML 规则的文件或目录,--output 标志应指向转换后的 YAML 规则的输出目录。

示例

注意

确保提取文件夹中脚本的文件权限设置为允许执行。

samples 文件夹中,可以找到名为 airsonic.war 的示例 Web 应用。 Airsonic 是基于网络的媒体流媒体,可以访问音乐并与朋友分享。 要了解有关 Airsonic 的更多信息,请参阅 Airsonic

samples 目录中,可以找到以下脚本来运行不同类型的分析:

  • run-assessment:提供报告,其中包含代码评估和将 Airsonic 迁移到 Tomcat 上的 Azure 应用服务的步骤。
  • run-assessment-transform-rules:将 Windup XML 规则转换为分析器 lsp 兼容的 YAML 规则。
  • run-assessment-custom-rules:使用自定义规则(将 XML 转换为 YAML)提供代码评估报告。
  • run-assessment-openjdk21:生成报告,其中包含代码评估和将 Airsonic 迁移到 OpenJDK 21 的步骤。
  • run-assessment-package-only:通过评估特定包生成报告。

根据操作系统,运行相应的脚本,如下例所示:

./samples/run-assessment

报告会自动生成并启动。 可以在 ../samples/report-* (Linux/macOS) 或 ..\samples\report-* 下找到报告。

分析摘要

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

appcat 摘要报表的屏幕截图。

当放大“按类别的事件”饼图时,可以按类别查看事件数量:必需可选潜在

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

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

评估报告

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

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

AppCAT 评估报告的屏幕截图。

特定问题的详细信息

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

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

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

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

发行说明

7.6.0.1

此版本包含以下修复内容和增强功能。

  • --analyze-known-libraries 标志:现在适用于 Windows。
  • 目录清理:现在会自动清理 Windows 上在分析期间创建的额外目录。
  • --json-output 标志:现在可正常运行。
  • 规则分析错误:已解决错误 unable to parse all the rules for ruleset
  • 见解选项卡说明:已添加缺失的规则说明。
  • Internet 连接依赖项:在没有 Internet 连接的情况下,分析不再失败。
  • --context-lines 标志:现在在设置为 0 时的表现将符合预期。
  • 运行该工具不再需要 Python。

7.6.0.0

此版本基于 Konveyor 项目的一组不同组件。

常规更新

6.3.9.0

此版本包含以下修复以及一组新规则。

常规更新

  • 集成了 Windup 上游存储库的更改 (6.3.9.Final Release)。
  • 解决了规则说明和帮助文本中链接损坏的问题。

规则

  • Azure Message Queue:已为 azure-message-queue-rabbitmqazure-message-queue-amqp 更新和添加了新规则。
  • Azure 服务总线:引入了 Azure 服务总线的检测规则。
  • MySQL 和 PostgreSQL:已优化的依赖项检测规则。
  • Azure-AWS 规则:增强和改进了现有规则。
  • S3 Spring Starter:为 S3 Spring Starter 添加了检测规则。
  • RabbitMQ Spring JMS:为 RabbitMQ Spring JMS 添加了检测规则。
  • 日志记录规则:更新和优化了与日志记录相关的规则。
  • 本地存储规则:更新和优化了本地存储规则。
  • Azure 文件系统规则:更新和优化了 Azure 文件系统规则。

Libraries

  • 更新了库以解决安全漏洞。

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 应用程序和代码评估。

已知问题

7.6.0.1

  • 不支持标志 --overrideProviderSettings
  • 规则问题:
    • 未触发 azure-system-config-01000http-session-01000java-removals-00150 规则。
    • 未触发 FileSystem - Java IO 规则。
  • 在 Windows 上分析 WAR 文件会产生以下错误:Failed to Move Decompiled File. 在 Windows 上分析 WAR 文件时发生错误,这是在 Windows 操作系统上创建的一些冗余事件的原因。
  • Windows 上的观察程序错误通道出错:Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上长时间运行的作业期间,此错误消息会出现在命令行上。
  • Ctrl+C 无法停止正在进行的分析。 为了解决这个问题,可以通过显式终止进程来手动终止进程。
  • 在二进制分析报告中,代码片段标题显示不正确的或不存在的文件路径。

7.6.0.0

  • 标志 --analyze-known-libraries 在 Windows 上不起作用。
  • 在 Windows 上,在分析过程中会生成以下额外文件夹,但在完成后不会自动移除。 您可能想要在分析完成后移除这些额外的文件夹。
    • metadata
    • org.eclipse.osgi
    • org.eclipse.equinox.app
    • org.eclipse.core.runtime
    • org.eclipse.equinox.launcher
  • 不支持标志 --overrideProviderSettings
  • 不支持标志 --json-output。 在未来的版本中,它将为 output.yamldependency.yaml 文件生成 JSON 输出。
  • 规则问题:
    • 未触发 azure-system-config-01000http-session-01000java-removals-00150 规则。
    • 未触发 FileSystem - Java IO 规则。
    • 运行分析时发生错误 unable to parse all the rules for ruleset。 当工具无法分析规则集中的所有规则时,在分析过程中会发生此错误。
  • 在 Windows 上分析 WAR 文件会产生以下错误:Failed to Move Decompiled File. 在 Windows 上分析 WAR 文件时发生错误,这是在 Windows 操作系统上创建的一些冗余事件的原因。
  • “见解”选项卡上缺少对某些规则的描述。一些标记规则缺少描述,导致报告的“见解”选项卡上出现空白标题。
  • Windows 上的“观察程序错误”通道出错:Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上长时间运行的作业期间,此错误消息会出现在命令行上。
  • 此版本需要活动的互联网连接才能进行依赖项分析。
  • Ctrl+C 无法停止正在进行的分析。 为了解决这个问题,可以通过显式终止进程来手动终止进程。
  • 当标志 --context-lines 设置为数字 0 时,它不会按预期工作。 此标志允许用户限制源代码应在报告中显示的数量。 设置为值 0 可能无法按预期工作。

许可证

适用于 Java 的 Azure Migrate 应用程序和代码评估是免费的、基于开放源代码的工具。