デプロイメント中に検出された非推奨のcom.google.common (Guava)ライブラリ使用状況の解決

非推奨のcom.google.common (Google Guava) APIが検出されると、AEMのデプロイメントが失敗するか、トリガーアクションセンターにアラートが通知されます。 Cloud Managerは、推移的な依存関係やテストスコープの依存関係を含む、すべてのOSGiの読み込みを検査するため、プロジェクトがGuavaに明示的に依存していない場合でも警告が表示されます。 修正は、古いACS AEM Commons、コアコンポーネントのサンプルパッケージ、テストライブラリ、またはGuava ユーティリティを直接参照するカスタムコードなど、ソースによって異なります。 Guava依存関係を削除または置き換えてから再デプロイすると、アラートがクリアされ、アクションセンターインシデントがクローズされます。

説明 description

問題:Cloud Managerで、デプロイメント時に非推奨のcom.google.common (Guava)使用状況が検出される

説明

Cloud ManagerとAEM APIの非推奨スキャナーは、com.google.common.*の使用を非推奨にしました。 Cloud Managerは、推移的な依存関係とテストスコープの依存関係を含むOSGiのインポートを検査するため、プロジェクトに明示的なGuava依存関係がない場合でも警告が表示されます。 この問題は、AEMaaCS、Managed Services、オンプレミス環境に影響します。

環境:

  • Adobe Experience Manager as a Cloud Service (AEMaaCS)
  • AEM Managed Services(AMS)
  • AEM 6.5 LTS オンプレミス
  • Cloud Manager(ビルドおよびコード品質パイプライン)

問題/症状:

  • アクション センターの警告:Deprecated Library Detected — com.google.common
  • com.google.common.collectなどのパッケージを参照するCloud Manager analyzer ログの警告
  • ライブラリの使用が非推奨になったため、パイプラインコード品質ステップが一時停止または失敗する
  • OSGi インスペクターは、移行テストの依存関係のみの場合でも、com.google.common.*のインポートを確認します

根本原因:

com.google.common APIは完全に非推奨となり、AEM as a Cloud Serviceでの削除が予定されています。 Cloud Managerは、依存関係が明示的、推移的、またはテストスコープであるかどうかに関係なく、com.google.common.*をインポートするバンドルにフラグを付けます。 非推奨の使用は、古いACS AEM Commons バージョン、コアコンポーネントのサンプルパッケージ、io.wcmのテストライブラリ、slf4j-testsling-mock、Asset Share Commons、またはLists.partition()などのGuava ユーティリティを使用したカスタムコードから発生する可能性があります。 AEM 6.5 LTSおよびオンプレミスでは、Guavaは出荷されなくなり、sling_bootstrap.txtの制限により、スタンドアロンバンドルとしてインストールできません。

確認方法

  1. コアバンドルモジュールで以下を実行して、テストスコープを含むGuavaで取り込まれるすべての依存関係を特定します。

    code language-none
    mvn dependency:tree -Dincludes=com.google.guava:*,com.google.common:*
    
  2. 出力を確認して、ソースが直接か推移的かを確認し、以下のいずれかの修復パスに一致させます。

  3. どのバンドルがcom.google.common.*を読み込むかを確認するために、Cloud Manager アナライザーログとの相互参照を行います。

解決策 resolution

  1. Guavaを使用したカスタムコード(AEMaaCS、AMS、オンプレミス): com.google.commonのユーティリティをJDKまたはApache Commons コレクション 4に置き換えます。 例えば、Lists.partition()をJava ストリームベースのバッチ処理アプローチに置き換えます。 プロジェクトを検索して確認します。

    code language-none
    grep -R "com.google.common" ./src
    

Guavaを削除すると、短期間で機能が破損する場合は、独自のGuava バージョンを一時的に埋め込み(手順5を参照)、リファクタリングを計画します。
​2. ACS AEM Commons PULLING 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-testio.wcm.testing.aem-mock.*などのテスト ライブラリを削除または置換します。 mvn dependency:treeを再実行して、com.google.commonが表示されなくなったことを確認します。 リークが引き続き発生する場合は、バンドルプラグインを設定してcom.google.common.*Import-Packageから除外します。
​5. AEM 6.5 オンプレミスまたはAMS — カスタムバンドル内にGuavaを埋め込む: Guavaが必要な場合は、スタンドアロンバンドルとしてインストールするのではなく、カスタムバンドル内にGuavaを埋め込むかシェードします(スタンドアロンインストールはsling_bootstrap.txtによってブロックされます)。 バンドルがGuava パッケージをエクスポートしていないことを確認します。 カスタムバンドルをデプロイして確認すると、Web コンソールにActive状態が表示されます。
​6. 再構築して再デプロイ:完全なCloud Manager パイプライン(AEMaaCS)を実行するか、AMS/オンプレミスのデプロイメントプロセスを通じてOSGi バンドルをデプロイします。 非推奨のcom.google.common.*警告を報告せずに、コード品質ステップが完了したことを確認します。
​7. 再検証: AEMaaCSの場合、完全なCloud Manager パイプラインを実行すると、Actions Center インシデントを作成するのと同じスキャナーが再トリガーされます。 非推奨の使用状況が検出されない場合、インシデントは自動的に解決されます。 アクションセンターを更新して、インシデントが閉じられていることを確認します。

検証

  1. もう一度mvn dependency:treeを実行し、com.google.common.*をインポートするモジュールがないことを確認します。
  2. デプロイメント後にCloud Manager analyzerのログを確認して、非推奨ライブラリの警告が残っていないことを確認します。
  3. アクション センターで非推奨のライブラリインシデントが生成されなくなりました。
  4. OSGi Web コンソールまたはパイプラインログを使用して、com.google.common.*をカスタムバンドルでインポートしないことを確認します。

関連トピックス

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