解決部署期間偵測到已棄用的com.google.common (Guava)程式庫使用問題
偵測到已棄用的com.google.common (Google Guava) API時,AEM部署失敗或觸發「動作中心」警示。 Cloud Manager會檢查所有OSGi匯入,包括傳遞和測試範圍相依性,因此即使專案未明確相依於Guava,也會出現警告。 修正取決於來源:過期的ACS AEM Commons、核心元件範例套件、測試程式庫或直接參照Guava公用程式的自訂程式碼。 移除或取代Guava相依性,然後重新部署,會清除警示並關閉Actions Center事件。
說明 description
問題: Cloud Manager會在部署期間標籤已過時的com.google.common (Guava)用法
說明
Cloud Manager和AEM API過時掃描器標幟已棄用com.google.common.*。 即使專案沒有明確的Guava相依性,也會出現警告,因為Cloud Manager會檢查OSGi匯入,包括傳遞和測試範圍相依性。 該問題會影響AEMaaCS、Managed Services和On-Premise環境。
環境:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- AEM Managed Services (AMS)
- 內部部署的AEM 6.5 LTS
- Cloud Manager (建置和程式碼品質管道)
問題/症狀:
- 動作中心警示:
Deprecated Library Detected — com.google.common - Cloud Manager分析器記錄檔警告,參考
com.google.common.collect之類的套件 - 管道計畫碼品質步驟由於使用已棄用的程式庫而暫停或失敗
- OSGi檢查器會確認套件組合匯入
com.google.common.*,即使它只是可傳遞的測試相依性
根本原因:
com.google.common API已完全過時並排程在AEM as a Cloud Service中移除。 Cloud Manager會標示匯入com.google.common.*的任何組合,無論相依性是明確、可傳遞或測試範圍。 過時的使用方式可能源自過時的ACS AEM Commons版本、核心元件範例套件、io.wcm測試程式庫、slf4j-test、sling-mock、Asset Share Commons,或使用Guava公用程式(例如Lists.partition())的自訂程式碼。 在AEM 6.5 LTS和內部部署中,由於sling_bootstrap.txt限制,Guava已不再出貨,且無法安裝為獨立套件。
如何確認
-
在核心套件模組中執行以下命令,以識別在Guava中提取的所有相依性,包括測試範圍:
code language-none mvn dependency:tree -Dincludes=com.google.guava:*,com.google.common:* -
檢閱輸出以確認來源是直接或可轉移,並比對至以下其中一個補救路徑。
-
與Cloud Manager分析器記錄檔互動參照,以確認哪些組合匯入
com.google.common.*。
解決方法 resolution
-
使用Guava的自訂程式碼(AEMaaCS、AMS、內部部署):將
com.google.common公用程式取代為JDK或Apache Commons Collections 4的對等專案。 例如,將Lists.partition()取代為Java資料流型批次處理方法。 透過搜尋專案進行驗證:code language-none grep -R "com.google.common" ./src
如果短期內移除Guava會中斷功能,請暫時內嵌您自己的Guava版本(請參閱步驟5)並計畫重構。
2. ACS AEM Commons正在提取Guava (AEMaaCS):請將ACS AEM Commons更新為至少版本6.11.0並確保已根據官方指引設定classifier=cloud。 重建並檢查分析器輸出,確認不再報告Guava。
3. 核心元件範例封裝(AEMaaCS):從您的all模組移除所有core.wcm.components.examples.*封裝。 重新執行mvn clean install並檢查建置的內容封裝,以確認範例封裝已不存在。 檢查它是否未由父POM繼承重新引入。
4. 測試範圍可傳遞相依性(AEMaaCS):移除或取代可傳遞參考Guava的測試程式庫,例如slf4j-test和io.wcm.testing.aem-mock.*。 重新執行mvn dependency:tree以確認com.google.common不再出現。 如果洩漏持續發生,請將組合外掛程式設定為從Import-Package中排除com.google.common.*。
5. AEM 6.5內部部署或AMS — 在自訂套件中內嵌Guava:如果需要Guava,請在自訂套件中內嵌或加上陰影,而非以獨立套件安裝(獨立安裝被sling_bootstrap.txt封鎖)。 確保該套件組合不會匯出其Guava套件。 部署並確認自訂套件組合會在Web主控台中顯示Active狀態。
6. 重建與重新部署:執行完整的Cloud Manager管道(AEMaaCS),或透過AMS/內部部署程式部署OSGi套件。 確認程式碼品質步驟完成,而不報告已棄用的com.google.common.*警告。
7. 重新驗證:對於AEMaaCS,執行完整的Cloud Manager管道會重新觸發產生動作中心事件的相同掃描器。 如果未偵測到已棄用的用法,事件會自動解析。 重新整理動作中心以確認事件已關閉。
驗證
- 再次執行
mvn dependency:tree並確認沒有模組匯入com.google.common.*。 - 部署後檢查Cloud Manager分析器記錄檔,確認沒有保留已棄用的程式庫警告。
- 確認動作中心不再產生已棄用的程式庫事件。
- 使用OSGi網頁主控台或管道記錄檔確認沒有自訂套件匯入
com.google.common.*。