3

現在、Eclipse Orbit プロジェクトのバンドルとして SLF4J を使用して、Eclipse ベースの製品にロギング機能をセットアップしようとしています。

私は詳細に使用します:

org.slf4j.api
ch.qos.logback.classic
ch.qos.logback.core
ch.qos.logback.slf4j

SLF4J ログ API を使用してテスト ケースを実行しようとすると、Tycho ビルドでエラー メッセージが表示されます。

19:05:50 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
19:05:50 SLF4J: Defaulting to no-operation (NOP) logger implementation
19:05:50 SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Surefire は、依存関係を検出するために、Eclipse 製品とプラグインの Manifest.MF ファイルのターゲット プラットフォームのみを使用します。ch.qos.logback.slf4j はフラグメントであるため、マニフェストに直接依存することはできません。

私の仮定は、フラグメントはテスト実行中のランタイム構成の一部ではないということです。

私の質問がばかげていないことを願っていますが、フラグメントがランタイム構成に追加され、SLF4J が StaticLoggerBinder の要求を解決できるように、環境を構成するにはどうすればよいですか?

4

2 に答える 2

0

私の仮定は、フラグメントはテスト実行中のランタイム構成の一部ではないということです。

私は slf4j の専門家ではありませんが、それが問題の原因のようです。必要な slf4j の背後にある実装を何らかの方法で指定する必要があります。

ところで、あなたの製品にも同じ問題があります。そこで問題をどう解決するか。


両方の問題に対する推奨事項は、必要なフラグメントを参照する機能を作成 (または再利用) することです。このような機能があれば、

  1. 製品のインストールでロギングが機能することを確認するために製品に含めます。

  2. テストランタイムに含めて、そこでログを機能させます。これは、次の構成で行うことができます。

    <plugin>
      <groupId>org.eclipse.tycho</groupId>
      <artifactId>target-platform-configuration</artifactId>
      <version>${tycho-version}</version>
      <configuration>
        <dependency-resolution>
          <extraRequirements>
            <requirement>
              <type>eclipse-feature</type>
              <id>feature-referencing-the-logging-implementation-fragment</id>
              <versionRange>0.0.0</versionRange>
            </requirement>
          </extraRequirements>
        </dependency-resolution>
      </configuration>
    </plugin>
    
于 2014-02-27T11:32:08.310 に答える