4

グーグルチューブでこれに対する答えに似たものを見ていないので、ここに行きます...

grails プロジェクトでは、いくつかのローカル プラグインを利用しています。私たちのプラグインの 1 つが最近 SLF4J に依存しています。メインの Web アプリケーション (プラグインを使用) も SLF4J に依存しています。これにより、実行時に完全に無害ですが、それでも刺激的な警告が表示されます。

Error SLF4J: Class path contains multiple SLF4J bindings.

通常、プラグインの SLF4J 依存関係で「除外」を定義するだけですが、これはローカル プラグインであるため、そうする方法がわかりません。私は試した...

grails.plugin.location.'localpluginname' = '../localplugindir'

grails.project.dependency.resolution = {
    plugins {
        runtime("com.ourcompany:localpluginname:1.0") {
            excludes('slf4j-api')
        }
    }
}

...しかし、リモートリポジトリで上記のプラグインを実際に解決しようとして失敗します。また、依存関係をまだ提供していない他のプロジェクトでプラグインが使用される可能性があるため、プラグインで直接依存関係を除外したくありません。

これを行うためにローカル プラグインをローカル Maven リポジトリにデプロイすることを誰かが提案する前に、それをやりたくないという邪魔にならないようにさせてください。理由があってそれらをローカルに持っているので、迅速に変更を加え、その変更を確認することができます。私たちは、変更のたびにデプロイする手間が増えるよりも、煩わしい警告メッセージと一緒に暮らしたいと思っています。

4

1 に答える 1

0

表示される警告は、クラスパスに複数のバージョンの slf4j-api が存在することとは関係ありません。SLF4J API は、一度に 1 つの基礎となるロギング フレームワークのみとバインドするように設計されています。クラスパスに複数のバインディングが存在する場合、SLF4J は警告を発し、それらのバインディングの場所をリストします。詳細については、SLF4J の警告またはエラー メッセージとその意味を参照してください。資料。Slf4J が提案する解決策は次のとおりです。クラス パスで複数のバインディングが使用可能な場合、使用するバインディングを 1 つだけ選択し、他のバインディングを削除します。あなたの場合、プラグインから Slf4J バインディングを直接除外するのが最善の方法です。プラグインは独自のバインディングに依存するのではなく、Grails アプリケーションがバインディングを提供すると想定する必要があります (これがプラグインが行うことです)。

于 2012-11-14T20:40:02.003 に答える