適用於 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 應用程式和程式代碼評估使用的規則會根據目標分組。 目標是應用程式執行的位置或方式,也代表一般需求和期望。 評估應用程式時,您可選擇多個目標。 下表描述可用的目標:

目標名稱 描述 標的
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 金鑰保管庫
  • Azure Front Door (Azure 前端網關)

下載並安裝

若要使用 appcat CLI,您必須下載環境專屬的套件,並在您的環境中具有必要的相依性。 appcat CLI 會在使用 Intel、Arm 或 Apple Silicon 硬體的任何環境中執行,例如 Windows、Linux 或 Mac。 針對 JDK 的需求,我們建議您使用 Microsoft 版本的 OpenJDK

作業系統 架構 下載連結 其他檔案
x64
窗戶 x64 下載 sha256 / sig
macOS x64 下載 sha256 / sig
Linux x64 下載 sha256 / sig
AArch64
窗戶 AArch64 / ARM64 下載 sha256 / sig
macOS Apple Silicon 下載 sha256 / sig
Linux AArch64 / ARM64 下載 sha256 / sig

必要條件

安裝 AppCAT

若要安裝 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

執行 AppCAT

若要從終端機中的任何位置執行 appcat ,請將封存解壓縮到您想要的位置。 然後,更新 PATH 環境變數以包含您解壓縮封存的目錄。

注意

appcat呼叫二進位檔時,它會先在環境變數中指定的PATH可執行檔資料夾中尋找其相依性。 如果找不到相依性,它會回復到使用者的主目錄 - Linux/Mac 上的 ~/.appcat ,或在 Windows 上 %USERPROFILE%\.appcat

使用方式

子命令

AppCAT 提供兩個子命令以供使用:

  • analyze:在輸入原始碼或二進位檔上執行原始程式碼分析。
  • transform:將 XML 規則從舊版 (6 和更舊版本) 轉換為此版本所使用的 YAML 格式。

注意

針對 macOS 使用者:如果您在嘗試執行應用程式時遇到錯誤 Apple could not verify ,您可以使用下列命令來解決此錯誤:

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,cloud-readiness --overwrite

--input 標必須指向原始程式碼目錄或二進位檔,而且 --output 必須指向目錄來儲存分析結果。

如需分析旗標的詳細資訊,請使用下列命令:

./appcat analyze --help

若要檢查 AppCAT 的可用目標,請使用下列命令:

./appcat analyze --list-targets

此命令會產生下列輸出:

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

分析多個應用程式

AppCAT 支援每個命令執行中的多個應用程式分析。 您可以為 旗標提供以逗號分隔的輸入路徑 --input 清單,以在單一命令中分析多個應用程式。 輸出目錄和靜態報表包含所有應用程式的合併分析結果。

若要分析多個應用程式,請使用下列命令:

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

AppCAT 也可讓您使用 --bulk 選項,以累加方式將更多應用程式分析新增至現有的輸出目錄和靜態報表。 當您使用 --bulk 選項時,您必須在寫入相同輸出的所有命令執行中一致地使用它。

注意

當您提供多個輸入路徑時, --bulk 預設會啟用 。

若要以累加方式將更多應用程式分析新增至現有的靜態報表,請使用下列命令:

./appcat analyze --input=<path-to-source-A>,<path-to-source-B>,<path-to-source-C> --output=<path-to-output-ABC> --target=<target-name>
./appcat analyze --bulk --input=<path-to-source-D> --output=<path-to-output-ABC> --target=<target-name>
./appcat analyze --bulk --input=<path-to-source-E> --output=<path-to-output-ABC> --target=<target-name>

轉換子命令

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 規則的輸出目錄。

範例

注意

請確定解壓縮資料夾中文稿的檔案許可權已設定為允許執行。

範例 目錄中,您可以找到下列腳本來執行不同類型的分析:

  • run-assessment:提供報告,其中包含程式代碼評量,以及將 Airsonic 移轉至 Tomcat 上的 Azure App Service 的步驟。
  • 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:藉由評估特定套件來產生報告。

這些腳本旨在與 Airsonic-Advanced 範例專案搭配使用,這是一個社群驅動的網頁式媒體串流器,可讓您存取和共用您的音樂集合。

您可以使用下列命令手動複製應用程式存放庫:

git clone https://github.com/airsonic-advanced/airsonic-advanced.git

複製之後,在執行評估文本時,提供複製資料夾的路徑。 根據您的作系統,執行適當的腳本,如下列範例所示:

注意

在執行腳本之前,請確定您已將 Airsonic Advanced 專案複製到本機路徑。

./samples/run-assessment <path-to-airsonic-advanced>

報表會自動產生並啟動。 您可以在 底下找到報告 。/samples/report-* (Linux/macOS) 或 ..\samples\report-* (Windows)。

分析摘要

報表的登陸頁面會顯示所有已分析應用程式的摘要檢視。 您可以從這裡瀏覽至個別應用程式報告,以探索詳細的結果。

appcat 摘要報告的螢幕快照。

右上角的 [詢問 Copilot ] 按鈕會將您重新導向至 Visual Studio Code 中適用於 Java 的 GitHub Copilot 應用程式現代化延伸模組。 此延伸模組提供應用程式評量和程式代碼補救,作為將Java應用程式遷移至 Azure 的主要功能,由 AppCAT 和 GitHub Copilot 的 AI 功能提供技術支援。

評估報告

評量報告提供 Azure 整備、雲端原生和 Java 現代化的各個層面分類問題清單,您需要解決以成功將應用程式遷移至 Azure。

每個 問題 都會依嚴重性分類 - 強制選擇性潛在 - 並包含受影響的程式代碼行數。

[相依性與技術] 索引標籤會顯示應用程式內使用的連結庫和技術。

AppCAT 評量報告的螢幕快照。

特定問題的詳細資訊

針對每個問題,您可以選取它來取得詳細資訊(問題詳細數據、規則的內容等等)。 您也會取得受此問題影響的所有檔案清單。

AppCAT 問題詳細數據報告的螢幕快照。

然後,針對每個受問題影響的檔案或類別,您可以跳到原始程式碼中,反白顯示建立問題的程式代碼行。

AppCAT 問題程式代碼報告的螢幕快照。

版本資訊

7.6.0.7

此版本包含下列修正和增強功能。

  • 支援分析以 Gradle 為基礎的 Spring 應用程式。
  • 支援分析 Open Liberty 專案。
  • 顯示評量期間處理的規則數目,以顯示評量進度。
  • 已從必要條件中移除 Maven。
  • 將已發行成品中的範例應用程式從 airsonic.war 替換為 airsonic-advanced

7.6.0.6

此版本包含下列修正和增強功能。

  • 預設 .appcat-ignore 檔案現在包含在發行套件中。 此檔案會導致工具排除不需要分析的指定資料夾或路徑。
  • 已修正使用 full 模式時,報表中遺漏相依性的問題(使用 --mode所指定)。
  • 未指定目標時,將範圍分析設定為AppCAT支援的目標。
  • 分析期間忽略的批注行。
  • 修正了 XML 規則不正確的位置。

7.6.0.5

此版本包含下列修正和增強功能。

  • --input 標現在接受多個值,可讓您在單一命令執行中分析多個應用程式。
  • 靜態報表會將其問題清單分類,以取得更佳的可讀性。
  • 用戶現在可以在使用者主目錄以外的目錄中安裝AppCAT。
  • 修正了執行 analyze 同時搭配 --bulk--skip-static-report 時無法產生多個輸出檔案的問題。
  • 已解決在沒有啟動 Java 提供者的情況下使用 --bulk--rules 進行分析時的失敗問題。
  • 已修正在使用 --packages 旗標時找不到指定的套件時,分析會失敗的問題。
  • 旗標 --exclude-paths 已不建議使用。 若要排除檔案或目錄,請使用 .appcat-ignore 檔案 - 支援 glob 模式 - 放在輸入目錄或安裝目錄中。

7.6.0.4

此版本包含下列修正和增強功能。

  • 支援遙測數據收集。 --disable-telemetry使用旗標來停用遙測。
  • 重新格式化 CLI 命令格式,使其更清楚。
    • 更新--source旗標,把--source <source1> --source <source2> ...變更為--source <source1>,<source2>,...
    • 更新--target旗標,把--target <target1> --target <target2> ...變更為 --target <target1>,<target2>,...
    • 更新--rules旗標,把--rules <rule1> --rules <rule2> ...變更為--rules <rule1>,<rule2>,...
    • --maven-settings 旗標更新為 --custom-maven-settings
    • --limit-code-snips 旗標更新為 --code-snips-number
    • --json-output拿掉旗標,使用--output-format旗標,選擇輸出格式:'yaml' 或 'json'。 (預設 yaml)
    • 移除--provider--override-provider-settings--list-providers--dependency-folders標誌
  • --exclude-paths 旗標:指定分析中應忽略的路徑。 針對多個值使用逗號分隔清單: --exclude-paths <path1>,<path2>,...。 預設值是 []
  • 新的 --packages 旗標:指定要評估的應用程式類別套件。 針對多個值使用逗號分隔清單: --packages <package1>,<package2>,...。 預設值是 []
  • 新的 --dry-run 旗標:只檢查旗標是否有效,而不會實際執行分析。 預設值是 false
  • 從 appcat azure-spring-apps 移除 --list-targets

7.6.0.3

此版本包含下列修正和增強功能。

  • --limit-code-snips 旗標:控制規則評估期間的代碼段限制(0=無限制,-1=停用代碼段)。
  • 修正了在大量分析模式中缺失相依性檔案導致的失敗:該工具在執行非 Java 專案或使用 --mode=source-only的 Java 專案進行大量分析時,不再中止。

7.6.0.2

此版本包含下列修正。

  • java-removals-00150 規則現在已正確觸發。

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-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 檔案系統規則。

圖書館

  • 已更新連結庫以解決安全性弱點。

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.7

  • 規則問題:
    • azure-system-config-01000規則沒有被觸發。
    • azure-password-01000 規則只會偵測一個違規,即使相同檔案中存在多個違規也一樣。
  • Windows 上的監看員錯誤通道錯誤: Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上長時間執行的工作期間,這個錯誤訊息會出現在命令行上。

7.6.0.6

  • 規則問題:
    • azure-system-config-01000規則沒有被觸發。
    • azure-password-01000 規則只會偵測一個違規,即使相同檔案中存在多個違規也一樣。
  • Windows 上的監看員錯誤通道錯誤: Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上長時間執行的工作期間,這個錯誤訊息會出現在命令行上。

7.6.0.5

  • 規則問題:
    • azure-system-config-01000規則沒有被觸發。
    • azure-password-01000 規則只會偵測一個違規,即使相同檔案中存在多個違規也一樣。
  • Windows 上的監看員錯誤通道錯誤: Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上長時間執行的工作期間,這個錯誤訊息會出現在命令行上。

7.6.0.4

  • 規則問題:
    • azure-system-config-01000規則沒有被觸發。
    • azure-password-01000 規則只會偵測一個違規,即使相同檔案中存在多個違規也一樣。
  • Windows 上的監看員錯誤通道錯誤: Windows system assumed buffer larger than it is, events have likely been missed。 在 Windows 上長時間執行的工作期間,這個錯誤訊息會出現在命令行上。

7.6.0.3

  • 不支援旗標 --overrideProviderSettings
  • 規則問題:
    • azure-system-config-01000不會 http-session-01000 觸發規則。
    • 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.2

  • 不支援旗標 --overrideProviderSettings
  • 規則問題:
    • azure-system-config-01000不會 http-session-01000 觸發規則。
    • 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.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 上,會在分析程式期間產生下列額外的資料夾,但在完成之後不會自動移除。 在分析完成之後,您可能會想要移除這些額外的資料夾。
    • 元數據
    • 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 應用程式和程式代碼評量是免費的 開放原始碼 型工具。

數據採集

AppCAT 預設會收集遙測數據。 Microsoft匯總收集的數據,以識別使用模式,以找出常見問題,並改善 AppCAT CLI 的體驗。 Microsoft AppCAT CLI 不會收集任何私人或個人資料。 例如,使用方式數據可協助識別具有低成功率的命令等問題。 此資訊可協助我們排定工作的優先順序。

我們非常感謝這類資料所提供的見解,但也了解不是每個人都想要傳送使用資料。 您可以使用 命令來停用資料收集 appcat analyze --disable-telemetry 。 如需詳細資訊,請參閱我們的 隱私聲明