解決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-apiconfiguration-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參考不會造成部署區塊,而且不需要客戶動作。

如何確認

  1. 檢閱Cloud Manager組建記錄檔中參照ch.qos.logback.*groovy-all:2.4.15com.day.cq.contentsync.handler.util或ACS Commons套件組合版本的專案。 如果無法存取記錄檔,請透過 Cloud Manager >管道>執行>記錄檔 下載。

  2. 找到如com.adobe.acs:acs-aem-commons-bundle:5.2.0之類的行或參考Logback的警告,以確認確切的ACS Commons版本。

  3. 執行完整的Maven相依性樹狀結構以檢查衝突的版本:

    code language-none
    mvn dependency:tree -Dincludes=com.adobe.acs:acs-aem-commons*
    
  4. 搜尋客戶擁有的檔案,以取得任何直接的Logback參照:

    • Windows:

      code language-none
      findstr /S /N /I "ch.qos.logback" pom.xml *.xml *.yml *.yaml
      

解決方法 resolution

  1. 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.BuildersSlingUriBuilder)取代已移除API (例如RequestResponseFactory)的使用方式。 重新執行Cloud Manager程式碼掃描,確認沒有保留已棄用的API警告。
​3. ACS Commons更新後 JSP預先編譯器失敗: 將Sling JSP Taglib相依性新增到具有scope=providedui.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.41.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警告。

相關閱讀

recommendation-more-help
experience-cloud-kcs-help-kbarticles