今考えると、色々なライブラリを使ってきたのに、よくこの手のエラーが出なかったなぁと思うのですが、先日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なるものも入っています。
色々ググってたら以下サイトで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による依存かどうかもわかります。
右クリックして「依存性を除外」を選択します。
すると!自分が手で書いていたものと同じ記述が追加されたー。
というわけで、今後はこのやり方が良さそうです。アドバイスありがとうございました(^^)