5

私の実際の状況で質問を説明します。

ロギングに logback 1.0.1 を使用しています。依存関係として SLF4J 1.6.4 が含まれています。また、明示的な依存関係ではないレガシー ロギング API (java.util.logging、log4j、および commons-logging) に SLF4J API ブリッジを使用します。これらも (できれば) バージョン 1.6.4 である必要があります。

私の pom.xml をできるだけきちんとしてエラーのないようにしようとして、これらの API ブリッジが SLF4J と同じバージョンであることを強制したいと思います。私が知っている唯一の方法は、バージョン 1.6.4 を使用して、pom.xml でそれらを依存関係として手動で定義することです。logback を更新して必要な SLF4J バージョンが発生した場合は、ブリッジ API を適切なバージョンに変更することを覚えておく必要があります。

レガシー API のバージョンを推移的な依存関係 SLF4J のバージョンに何らかの方法でフックできますか?

現在の pom.xml:

    <properties>
    <org.slf4j.version>1.6.4</org.slf4j.version>
</properties>

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.1</version>
        <!-- requires SLF4J 1.6.4 -->
    </dependency>
    <!-- ... -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
        <!-- here, how to bind this version value to SLF4J's version? -->
        <scope>runtime</scope>
    </dependency>
    <!-- the other two bridge API's go here -->
</dependencies>
4

3 に答える 3

1

とても美しい方法ではありません:/

Maven エンフォーサ プラグインがあります: http://maven.apache.org/enforcer/enforcer-rules/

そのため、推移的な依存関係を禁止し、必要なバージョンを含めることができます: http://maven.apache.org/enforcer/enforcer-rules/bannedDependencies.html

適切なバージョンのプロパティを使用する場合、エンフォーサ プラグイン バージョンをいじる必要はありません。

于 2013-02-13T21:45:24.727 に答える
0

トップレベルの pom で slf4j に直接依存しないでください。

于 2013-02-13T21:51:18.337 に答える