前回、「Java共通ライブラリー内でSLF4J+logbackを使ってハマったこと」という内容の記事を書きました。
その時は、「SLF4J: Class path contains multiple SLF4J bindings.」や「Resource [logback.xml] occurs multiple times on the classpath.」の警告メッセージと格闘し、最終的に「Resource [logback.xml] occurs multiple times on the classpath.」は出力されるけど、想定通りに動くから「ま、いっか!」とフタをしてしまいました。
しかし、少し時間を置いて考えてみたら、別な方法で解決できたのでまとめておきたいと思います。
改善前
こちらが改善前の状況です。
独自Commonライブラリーは、一般的なユーティリティ(ex: StringUtils, DateUtils)が格納されています。 そこに「営業日確認」メソッドなど、直接実行できるようにしていたのでした。
つまり、独自Commonライブラリーは、実行可能なJARファイルということです。
その結果、図の通り、「logback.xml」が2つ必要になり、用途側では「Resource [logback.xml] occurs multiple times on the classpath.」の警告が吐き出されていたわけです(当然ですね)。
改善後
下記の図が、今回採用したものです。
独自Commonライブラリーを直接実行できないものに改変し(実行可能なJARでは無くなりました)、単なるユーティリティ集としました。
それから、その独自Commonライブラリーを含めたJava Applicationを新規に作成しました!(用途Bのアプリ)
つまり、独自Commonライブラリーを標準的な使い方にしたことで、前回の問題があっさり解決できたというわけです。
基本に従え!! ただただそれだけです。
改善前と完全後の図を見比べてもらえば、改善後の方が美しい形をしていると言えましょう!!
まとめ
今回の学びは、ズバリ次の2つです。
- 原理・原則に従った制作を心がける。
- 悩んだときは、一度そこから離れてみる。それからスッキリしたところで冷静に考える。
まさに人生訓と同じですね。