Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Mavenのexclusionsタグを知らなかった…

今考えると、色々なライブラリを使ってきたのに、よくこの手のエラーが出なかったなぁと思うのですが、先日Dozerなるライブラリを入れた結果、GlassFishの起動時に

SEVERE: SLF4J: Class path contains multiple SLF4J bindings.
SEVERE: SLF4J: Found binding in [jar:file:/C:/Users/hogehoge/Documents/NetBeansProjects/HogeProject/target/MazakCpqProject-1.0.0/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SEVERE: SLF4J: Found binding in [jar:file:/C:/Users/hogehoge/Documents/NetBeansProjects/HogeProject/target/MazakCpqProject-1.0.0/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SEVERE: SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SEVERE: SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

みたいな警告が出るようになってしまいました。

ちなみにDozerを入れた経緯は以下。
(過去に書いた「ディープコピー in JPA」の訂正)

今回のプロジェクトでは、ロギングライブラリとしてSLF4jとLogbackを利用しているのですが、Dozerの依存性をみると同じくSLF4jを使っていて、slf4j-log4j12なるものも入っています。

f:id:kikutaro777:20130529211520j:plain

色々ググってたら以下サイトでmavenで依存性を強制排除する、みたいなのがあって、log4jは今回使わないから抜いても大丈夫では…と試してみました。

dozerの依存性を以下のように記述して

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer</artifactId>
    <version>5.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

クリーンビルドして実行したら、最初のエラーが消えました。良かったー。
Mavenは便利な反面、依存性の依存性の……でハマることもあるんだなぁ、と今更ながら学びました。

しかし下手に抜くとライブラリが動かなくなったりもなくはなさそうで、注意して使わないといけないのかな?と思ったり。この辺り、まだよくわかっていない(^^;

※2013/5/30補足追記

コメント欄で@kisさんが下さったように、NetBeansであればわざわざ自分でタグを追記せずともGUI操作で自動記述されました(^^;

具体的には、まず今回自分のやったDozerからslf4j-log4j12の依存性を省く場合

NetBeansの依存性から該当ライブラリを探します。ポイントすると「経由」が表示されるのでdozerによる依存かどうかもわかります。

f:id:kikutaro777:20130530190048j:plain

右クリックして「依存性を除外」を選択します。

f:id:kikutaro777:20130530190153j:plain

すると!自分が手で書いていたものと同じ記述が追加されたー。

f:id:kikutaro777:20130530190247j:plain

というわけで、今後はこのやり方が良さそうです。アドバイスありがとうございました(^^)

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村