解決Cloud Manager中ch.qos.logback和已移除API的已棄用程式庫使用警告問題
Cloud Manager會報告在建置、程式碼品質或部署步驟期間ch.qos.logback的已棄用資料庫使用或其他已移除的API。 這些警告來自過時的ACS AEM Commons版本、錯誤的Maven分類器,或直接參考已移除API的客戶程式碼。 在某些情況下,Logback參考資料來自Adobe管理的平台套裝,不需要客戶進行任何變更。 識別確切的來源(ACS Commons版本、分類器不相符、客戶代碼或Adobe執行階段)會決定正確的修正。
說明 description
問題: Cloud Manager會在建置或程式碼品質檢查期間標籤已過時的ch.qos.logback或移除的API使用方式
說明
Cloud Manager動作中心警示或管道故障表示ch.qos.logback的已棄用或其他已移除的API。 這些警告會顯示在region-deprecated-api或configuration-api檢查下的建置階段。 根本原因不一:過時的ACS AEM Commons版本會暫時提取Logback、使用錯誤的Maven分類器、客戶程式碼參考已移除API,或Adobe管理的內部套件會在執行階段登入Logback而不影響建置。
環境:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- Cloud Manager (建置、程式碼品質和部署管道)
- ACS AEM公域
問題/症狀:
- Cloud Manager建置記錄檔顯示:
Usage of deprecated package found : ch.qos.logback.* : This internal logback API is not supported by AEM as a Cloud Service - 執行階段記錄檔包含
ServiceEvent REGISTERED [ ch.qos.logback.core.filter.Filter]等專案,即使客戶程式碼未使用Logback - 組建編譯失敗,發生與已棄用的API相關的錯誤,例如
RequestResponseFactory - 程式碼分析器報告
Service.ranking is not of type Integer之類的錯誤或來自groovy-all:2.4.15的警告 - 升級ACS Commons後出現JSP預先編譯器失敗:
File tld:http://sling.apache.org/taglibs/sling/1.0 not found
根本原因:
當Cloud Manager偵測到使用已排定移除的API時,就會出現已棄用的程式庫警告。 較舊的ACS AEM Commons套件包含可傳遞的ch.qos.logback,在AEMaaCS上使用內部部署ACS Commons分類器也會觸發此警告。 客戶程式碼參考在Cloud Service中過時的API (例如com.day.cq.contentsync.handler.util.RequestResponseFactory)會產生類似的失敗。 Adobe管理的平台套件組合中的Logback參考不會造成部署區塊,而且不需要客戶動作。
如何確認
-
檢閱Cloud Manager組建記錄檔中參照
ch.qos.logback.*、groovy-all:2.4.15、com.day.cq.contentsync.handler.util或ACS Commons套件組合版本的專案。 如果無法存取記錄檔,請透過 Cloud Manager>管道>執行>記錄檔 下載。 -
找到如
com.adobe.acs:acs-aem-commons-bundle:5.2.0之類的行或參考Logback的警告,以確認確切的ACS Commons版本。 -
執行完整的Maven相依性樹狀結構以檢查衝突的版本:
code language-none mvn dependency:tree -Dincludes=com.adobe.acs:acs-aem-commons* -
搜尋客戶擁有的檔案,以取得任何直接的Logback參照:
-
Windows:
code language-none findstr /S /N /I "ch.qos.logback" pom.xml *.xml *.yml *.yaml
-
解決方法 resolution
-
ACS Commons版本或分類不符(最常見):請檢查專案的
all/pom.xml是否有ACS Commons相依性。 請確定<classifier>cloud</classifier>存在且版本至少為6.11.0。 專案應類似於:code language-none <groupId>com.adobe.acs</groupId> <artifactId>acs-aem-commons-all</artifactId> <version>6.16.0</version> <classifier>cloud</classifier>
如果相依性樹狀結構中出現衝突的版本,請移除對舊版ACS Commons組建的任何直接或傳遞參考。
2. 參考已移除API的客戶程式碼:搜尋您的程式碼基底,找出在Cloud Manager記錄檔中標幟的已棄用套件。 以Sling Builder API (org.apache.sling.api.request.builder.Builders或SlingUriBuilder)取代已移除API (例如RequestResponseFactory)的使用方式。 重新執行Cloud Manager程式碼掃描,確認沒有保留已棄用的API警告。
3. ACS Commons更新後 JSP預先編譯器失敗: 將Sling JSP Taglib相依性新增到具有scope=provided的ui.apps模組:
``
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
<version>2.4.0</version>
<scope>已提供</scope>
`’
重新執行管道,並確認tld not found錯誤已不存在。
4. 較新版本上的aemanalyzer設定錯誤:如果版本1.6.16傳回Service.ranking is not of type Integer等錯誤,請切換至版本1.6.4或1.6.14。 重新執行管道並確認其完成,且沒有分析器錯誤。
5. groovy-all:2.4.15標示為已過時:取代為Orbinson Groovy主控台變體:
``
<groupId>be.orbinson.aem</groupId>
<artifactId>aem-groovy-console-all</artifactId>
<version>19.0.8</version>
<type>zip</type>
``
確認程式碼品質步驟報告沒有groovy-all警告。 如果Groovy Console不在使用中,請完全移除它。
6. 僅來自Adobe管理的套件組合的Logback參考:如果程式碼品質未顯示已棄用的程式庫警告,且只有Logback專案是僅執行階段行,例如記錄中的ServiceEvent REGISTERED [ ch.qos.logback.core.filter.Filter] — 在建置步驟中沒有警告 — 則不需要採取任何動作。 這些套件源自Adobe平台套件組合,不會阻礙部署。
7. 驗證:開始新的程式碼掃描或完整管道執行。 確認建置記錄檔在region-deprecated-api下未顯示ch.qos.logback專案,並且沒有客戶程式碼或ACS Commons的已棄用API警告。