適用於 Java 第 7 版的 Azure Migrate 應用程式和程式代碼評估 (預覽)
注意
本文適用於新一代的 Azure Migrate 應用程式和 Java 版本 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 Message Service (JMS)等等。 接著,此工具可協助您使用特定的 Azure 重新格式化規則,將 Java 應用程式重新格式化為不同的 Azure 目標-Azure App 服務、Azure Kubernetes Service 和 Azure Container Apps。
此工具是以 Cloud Native Computing Foundation 專案 Konveyor 中的一組元件為基礎,由 Red Hat 建立和領導。
概觀
此工具的設計可協助組織以降低成本並加快創新速度的方式,將 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 |
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 會在使用 Intel、Arm 或 Apple Silicon 硬體的任何環境中執行,例如 Windows、Linux 或 Mac。
針對 JDK 需求,建議您使用 openJDK Microsoft組建。
OS | 架構 | 下載連結 | 其他檔案 |
---|---|---|---|
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 |
必要條件
- 下載 並 安裝 Microsoft OpenJDK 17 組建。 確定已 設定JAVA_HOME 環境變數。
-
下載 Apache Maven 並在 本機安裝。 確定 Maven 二進位檔 (
mvn
) 可透過PATH
環境變數連線。 - 下載並安裝 Python 3。
安裝
若要安裝 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 資料夾 - $HOME/.appcat on Linux/Mac 和 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
:將 XML 規則從舊版 (6 和更舊版本) 轉換為此版本所使用的 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
命令可讓您將 6.x 版中使用的先前 appcat
XML 規則轉換成這個版本 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。
在 範例 目錄中,您可以找到下列腳本來執行不同類型的分析:
- run-assessment:提供報告,其中包含程式代碼評量,以及將 Airsonic 移轉至 Tomcat 上 Azure App 服務 的步驟。
- run-assessment-transform-rules:將 Windup XML 規則轉換為 analyzer-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-* (Windows)。
分析摘要
報表的登陸頁面列出應用程式使用的所有技術。 儀表板提供分析的摘要,包括轉換事件數目、事件類別或故事點數。
當您依 類別 分類的餅圖放大事件時,可以依類別查看事件數目: 必要、 選擇性和 潛在。
儀表板也會顯示故事點。 故事點數是敏捷式軟體開發 (Agile Software Development) 常用的抽象計量,用來估計實作功能或變更所需的工作層級。
appcat
使用故事點數表示移轉特定應用程式所需的工作層級。 故事點數未必會轉譯為工作時間,但值應該在不同工作保持一致。
評估報告
評估報告概述需要解決哪些轉換問題,才能將應用程式遷移至 Azure。
這些問題也稱為事件,具有嚴重性(強制、選擇性或潛在)、工作層級,以及指出故事點的數位。 故事點數取決於計算解決問題所需的事件次數。
特定問題的詳細資訊
針對每個事件,選取事件即可取得詳細資訊 (問題的詳細資料、規則的內容等)。 您還會獲得此事件影響之所有檔案的清單。
然後,針對事件影響的每個檔案或類別,您可以跳入原始程式碼,將造成問題的程式碼醒目提示。
版本資訊
7.6.0.1
此版本包含下列修正和增強功能。
-
--analyze-known-libraries
flag:現在可在 Windows 上運作。 - 目錄清除:在 Windows 上分析期間建立的額外目錄現在會自動清除。
-
--json-output
flag:現在可運作。 - 規則剖析錯誤:錯誤
unable to parse all the rules for ruleset
已解決。 - 深入解析索引標籤描述:已新增遺漏規則描述。
- 因特網連線相依性:沒有因特網連線,分析就不會再失敗。
-
--context-lines
flag:現在設定為 0 時的行為會如預期般運作。 - 已移除執行工具的 Python 需求。
7.6.0.0
此版本是以 Konveyor 專案的不同元件集為基礎。
一般更新
6.3.9.0
此版本包含下列修正,並包含一組新的規則。
一般更新
- Windup 上游存放庫的整合式變更(6.3.9.最終版本)。
- 已解決規則描述和說明文字中的中斷連結。
規則
- Azure 消息佇列:已更新並新增 和
azure-message-queue-amqp
的新規則azure-message-queue-rabbitmq
。 - 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 (正式發行) 版本。
已知問題
7.6.0.1
- 不支援旗標
--overrideProviderSettings
。 - 規則問題:
-
azure-system-config-01000
、http-session-01000
、java-removals-00150
未觸發規則。 -
FileSystem - Java IO
未觸發規則。
-
- 分析 Windows 上的 WAR 檔案會產生下列錯誤:
Failed to Move Decompiled File
。 分析 Windows 上的 WAR 檔案時發生錯誤,這負責在 Windows OS 上建立的一些備援事件。 - 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.yaml 和 dependency.yaml 檔案產生 JSON 輸出。 - 規則問題:
-
azure-system-config-01000
、http-session-01000
、java-removals-00150
未觸發規則。 -
FileSystem - Java IO
未觸發規則。 - 執行分析時發生錯誤
unable to parse all the rules for ruleset
。 當工具無法剖析規則集中的所有規則時,就會在分析期間發生此錯誤。
-
- 分析 Windows 上的 WAR 檔案會產生下列錯誤:
Failed to Move Decompiled File
。 分析 Windows 上的 WAR 檔案時發生錯誤,這負責在 Windows OS 上建立的一些備援事件。 - [深入解析] 索引標籤上某些規則缺少描述。某些標籤規則缺少描述,導致報表 [深入解析] 索引卷標上出現空白標題。
-
Windows 上的監看員錯誤通道錯誤:
Windows system assumed buffer larger than it is, events have likely been missed
。 在 Windows 上長時間執行的工作期間,這個錯誤訊息會出現在命令行上。 - 此版本需要作用中的因特網連線以進行相依性分析。
- Ctrl+C 無法停止進行中的分析。 若要解決此問題,請明確終止進程,以手動終止進程。
- 當旗標
--context-lines
設定為數位 0 時,它無法如預期般運作。 此旗標可讓使用者限制報表上應該顯示多少原始程式碼。 將設定為值 0 可能無法如預期般運作。
授權
適用於 Java 的 Azure Migrate 應用程式和程式代碼評量是免費的 開放原始碼 型工具。