ホームページ  >  記事  >  2.x に更新した後、OSGi バンドルで「slf4j.api」を使用するには、拡張子「osgi.serviceloader.processor」が必要です。

2.x に更新した後、OSGi バンドルで「slf4j.api」を使用するには、拡張子「osgi.serviceloader.processor」が必要です。

王林
王林転載
2024-02-10 21:12:08971ブラウズ

最新のアップデートをバージョン 2.x に導入した後、Apple の PHP エディタは、OSGi パッケージで「slf4j.api」を使用するには拡張子「osgi.serviceloader.processor」が必要であることを発見しました。この更新は、柔軟性と利便性が向上するため、この拡張機能を使用する開発者にとって重要な変更です。この更新の目的は、開発者が slf4j.api をより適切に使用および管理し、プログラムのパフォーマンスと安定性を向上できるようにすることです。開発者は、進化するニーズを満たすためのさらなるアップデートと改善を期待できます。

質問内容

github に小さな再現プロジェクトを作成しました: slf4j-experiment

基本的に必要なのは、slf4j-api を使用したコードを含む osgi パッケージです。

###例:### リーリー

私の

build.gradle

には次のものがあります: リーリー これは slf4j で期待どおりに動作します

1.7.36

現在 slf4j の

2.0.11

バージョンを使用していますが、サービス プロバイダーを使用しているため、osgi メタデータにモデル化された新しい制約があり、現在行き詰まっています: リーリー おそらく spi fly によって提供される追加のバンドルが必要なようですが、その方法がわかりません...

回避策

あなたの

Example

ステートメント: リーリー (私は gradle osgi bnd のファンではありません) は、Maven Central から

slf4j-api-1.7.36.jar

に解決されます。 これは正しい osgi バンドルです:

リーリー

しかし

slf4j-api-2.0.11.jar

には次の内容があります: リーリー 実際 -

aries spi-fly

を満たします: リーリー slf4j は、このコミットでこれらのヘッダー (必須)

を取得しました。 p>

spi-fly は、osgi による java サービス ローダー

であり、正しいスレッド コンテキスト クラスローダーが設定されるようにバンドルのコードを動的に変換します。 これは実際には、ロガー実装の

静的バインディング

から /meta-inf/services/ org のサービス検出に切り替えるための slf4j API 2 の適切な 要件 です。 .slf4j.spi.slf4jserviceprovider サービス。 しかし、オスギは粘り強い獣です。ロギングについては、pax ロギング プロジェクトをお勧めします。このプロジェクトでは、正しい

org.slf4j

パッケージをエクスポートするだけでなく、ロギング バックエンドを動的に構成し、osgi 構成管理を使用して構成することもできます。

以上が2.x に更新した後、OSGi バンドルで「slf4j.api」を使用するには、拡張子「osgi.serviceloader.processor」が必要です。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。