適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估
本指南說明如何使用適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估工具,評估任何類型 Java 應用程式並加以移轉平台。 此工具可讓您針對移轉平台和移轉至 Azure,評估應用程式整備程度。 此工具是以 CLI(命令行介面)的形式提供,並評估 Java 應用程式二進位檔和原始程式碼,以識別 Azure 的重新格式化和移轉機會。 它識別常見的使用案例和程序碼模式,並提出建議的變更,協助您大規模將 JAVA 應用程式現代化並移轉平台。
此工具會透過靜態程式碼分析來探索應用程式技術使用方式、提供投入量估計,並加速程式碼移轉,協助您排定優先順序並將 JAVA 應用程式移至 Azure。 其利用一組引擎和規則,藉以探索及評估不同的技術,例如 JAVA 11、JAVA 17、Jakarta EE、Spring、Hibernate、Java 訊息服務 (JMS) 等。 然後,它可協助您使用特定的 Azure 重新格式化規則,將 Java 應用程式重新格式化為不同的 Azure 目標(Azure App 服務、Azure Kubernetes Service 和 Azure Container Apps)。
此工具是開放原始碼,並以 WindUp (由 Red Hat 建立的專案並按 Eclipse 公用授權發佈) 為基礎。
概觀
此工具的設計可協助組織以降低成本並加快創新速度的方式,將 JAVA 應用程式現代化。 此工具使用進階分析技術,了解任何 JAVA 應用程式的結構和相依性,並提供如何重構應用程式並將其遷移至 Azure 的指導。
使用此工具時,可執行下列工作:
- 探索技術使用方式:快速查看應用程式所使用的技術。 如果您的舊版應用程式沒有太多文件,而且想要知道它使用哪些技術,探索非常實用。
- 根據特定目標評估程式碼:針對特定 Azure 目標評估應用程式。 檢查若要將應用程式移轉平台至 Azure,您必須執行的工作和修改。
支援的目標
此工具包含協助您將應用程式移轉平台的規則,以便部署至不同 Azure 服務以及使用這些服務。
Azure Migrate 應用程式和程式代碼評估使用的規則會根據目標分組。 目標是應用程式執行的位置或方式,也代表一般需求和期望。 評估應用程式時,您可選擇多個目標。 下表描述可用的目標:
Target | 描述 | 識別碼 |
---|---|---|
Azure App Service | 將應用程式部署至 Azure App Service 的最佳做法。 | azure-appservice |
Azure Kubernetes Service | 將應用程式部署至 Azure Kubernetes Service 的最佳做法。 | azure-aks |
Azure 容器應用程式 | 將應用程式部署至 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 會在適用於 Intel、Arm 和 Apple Silicon 硬體的 Java 相容環境 (例如 Windows、Linux 或 Mac) 上執行。 建議您使用 OpenJDK 的 Microsoft 組建。
下載適用於 Java 6.3.9.0 的 Azure Migrate 應用程式和程式代碼評估。 更新日期為 2024-12-09。
如需詳細資訊,請參閱 版本資訊 一節。
已知問題
剖析特定 Lambda 運算式時,可能不會觸發特定規則。 如需詳細資訊,請參閱 GitHub 問題。
在具有複雜雙位元組字元的非 Unicode 環境中執行 appcat
會導致損毀。 如需因應措施,請參閱 GitHub 問題。
舊版
下列舊版也可供下載:
- 適用於 Java 6.3.0.9 的 Azure Migrate 應用程式和程式代碼評估。 發行於 2024 年 8 月。
- 適用於 Java 6.3.0.8 的 Azure Migrate 應用程式和程式代碼評估。 發行於 2024 年 3 月。
- 適用於 Java 6.3.0.7 的 Azure Migrate 應用程式和程式代碼評估。 發行於 2023 年 11 月。
開始使用
若要執行 appcat
,請確定您已安裝支援的 JDK。 此工具支援下列 JDK:
- Microsoft OpenJDK 11 的組建
- Microsoft 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
- 文件:此目錄包含
appcat
的文件。 - bin:此目錄包含
appcat
CLI 可執行檔 (適用於 Windows/Linux/Mac)。 - 範例:此目錄包含應用程式範例和數個指令碼,可根據應用程式範例執行
appcat
。
若要執行此工具,請開啟終端工作階段,然後輸入 $APPCAT_HOME/bin 目錄的下列命令:
./appcat --help
若要從電腦的任何位置執行此工具,請將目錄設定為 $APPCAT_HOME/bin 並新增至 PATH
環境變數,然後重新啟動終端工作階段。
文件
下列指南提供 JAVA appcat
的主要文件:
在沒有 Azure 服務的情況下,探索技術使用和雲端整備程度
探索技術和雲端整備程度目標可以讓您深入了解應用程式移轉和雲端現代化。 此工具會掃描應用程式及其元件,全方位了解其結構、架構和相依性。 這也會在雲端環境中發現可能具有挑戰性的潛在問題。 discovery
目標特別用於建立應用程式的詳細清查和其元件。 此清查可作為進一步分析和規劃的基礎。 如需詳細資訊,請參閱探索報表一節。
使用下列命令以起始探索和雲端整備程度:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target discovery cloud-readiness
當您沒有要在其中部署應用程式的 Azure 服務時,此類型的報表將提供幫助。
無論您是否將該值包含在 --target
參數,此工具一律執行 discovery
。
評估 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
產生的報表提供了應用程式及其元件的完整概觀。 您可以用這份報表深入解析應用程式的結構和相依性,並判斷它是否適合移轉平台和現代化。
下列各節會提供關於報表的詳細資訊。
分析摘要
報表的登陸頁面列出應用程式使用的所有技術。 儀表板提供分析的摘要,包括轉換事件數目、事件類別或故事點數。
放大依類別區分事件圓形圖時,您可依類別查看事件數目:強制、選用、潛在,以及資訊。
儀表板也會顯示故事點。 故事點數是敏捷式軟體開發 (Agile Software Development) 常用的抽象計量,用來估計實作功能或變更所需的工作層級。 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 App 服務、Azure Kubernetes Service (AKS) 和 Azure Container Apps。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.9.0
此版本包含下列修正,並包含一組新的規則。 如需詳細資訊,請參閱以下的<>。
一般更新
- Windup 上游存放庫的整合式變更(6.3.9.最終版本)。
- 已解決規則描述和說明文字中的中斷連結。
規則
- Azure 消息佇列:已更新並新增 azure-message-queue-rabbitmq 和 azure-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、Alibaba 雲端 OS S、Alibaba Cloud SMS、Alibaba Scheduler X、Alibaba Cloud Seata 和 Alibaba Rocket MQ。
azure-file-system-02000
已將 更新為 ,現在支援 xml 擴展名。- 已升級各種連結庫以解決安全性弱點。
6.3.0.8
先前依預設啟用一組目標,這使得某些客戶很難評估大型應用程式,因為應用程式中有過多與較不重要問題相關的事件。 若要減少報表中的干擾,使用者必須現在使用參數 --target
指定多個目標,當執行 appcat
時,為使用者提供僅選取重要目標的選項。
6.3.0.7
Azure Migrate 應用程式和程式代碼評估的 GA (正式發行) 版本。
授權
適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估是免費的開放原始碼工具,與上游 WindUp 專案使用相同的授權。
常見問題集
問:我可以在哪裡下載適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估最新版本?
您可以從 aka.ms/appcat/azure-appcat-cli-latest.zip 下載 appcat
。
問:我可以在哪裡找到適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估詳細資訊?
下載 appcat
時,您會獲得文件目錄,其中包含開始使用所需的所有資訊。
問:我可以在哪裡找到特定的 Azure 規則?
appcat 規則集 GitHub 存放庫提供所有的 Azure 規則。
問:我可以在哪裡找到有關建立自訂規則的詳細資訊?
請參閱適用於 JAVA 的 Azure Migrate 應用程式和程式代碼評估規則開發指南。
問:建立自訂規則時,我可以在哪裡尋求協助?
在 appcat-rulesets GitHub 存放庫建立問題是取得協助的最佳方式。