JBoss Tattletaleを使って依存関係を調べよう

JBoss Tattletaleは依存関係を調べてくれるツールです.
ライセンスはLGPLです.
Beta1がリリースてたので使ってみました.

事前準備


以下からダウンロードします.

http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=311046&release_id=662710


まだサイトは無いみたいですね.

概要


JBoss Tattletaleを使うと、プロジェクト内を静的に解析して、以下のような情報をレポートして出力します.

  • 自分のプロジェクトが依存しているjarファイルとそのバージョン
  • 必要なんだけど、欠けているクラス
  • あるクラスが複数のjarファイルに含まれている場合、そのクラスごとにどこに含まれているか

使ってみた率直な感想.かなり便利.
特に途中からプロジェクトに投入されたりとか、チームで案件用フレームワークなんか作っていて、
たまにjarの依存関係など調べたいときとか、あとはそもそも成果物の一つとしてこの依存関係のレポートも
一緒に求めたりとか、用途は様々に使えます.というわけで使い方をまとめてみました.

使い方


使い方は簡単.jboss-tattletale.jarをダウンロードしてきて、
こんな感じで、java -jar jboss-tattletale.jar 調べたいプロジェクトのディレクトリ 出力先ディレクトリとするだけ.

java -Xmx512m -jar jboss-tattletale.jar /Users/shot/dev/workspace/t2 ./t2-report

解析結果


ひとまず手元にあったt2-employeeサンプルでやってみました.中身的にはT2+Seasar2.3+S2Daoです.
まず出来上がったレポートのindex.htmlを表示します.

Dependencies, Multiple Jar Files, Multiple Locations, Jar Filesという項目があります.
順番にみていきましょう.

Dependencies

まずはDependenciesレポート.ここには対象にしたプロジェクトが依存しているjarファイルの一覧が出てくるです.



おおー、見やすい.各jarファイルごとに一覧になっていて、そのjarがさらに依存しているクラスやjarも
きちんと出てきます.たとえば、commons-0.5.0-ga.jarはgeronimo-j2ee_1.4_spec-1.0.jar, junitのクラス, jxlのクラス, slf4j-api-1.4.2.jarに依存してます.


んではこの中から、その依存jarの詳細についてみていきます.
slf4j-api-1.4.2.jarを見てみましょう.

上半分

下半分


各jarの詳細についてのレポートが表示されるます.以下の項目です.

  • jarファイル名をあらわすName
  • 物理的な配置位置を表すLocations
  • このjarが必要としているクラスをあらわすRequires
  • このクラスが提供するクラスをあらわすProvidesが表示されます.


このレポートを読めば、あるjarに対して、何が提供されていて、何が必要なのかがすぐわかります.

Multiple Jar Files

つづいて、レポートのTopに戻って、Multiple Jar Filesのレポートを見てみるます.
このレポートは、あるクラスが複数のjarに含まれる場合にレポートに出ます.




う、なるほど.j2ee.jarとejb.jar両方に含まれているのが両方あるのね。。。。と
リアルにその場で役に立ってしまいました^^;
と、このように同一クラスが複数個含まれている場合を教えてくれます.
同一クラスが複数個含まれていると、getResource()で返ってくるものが意図したものかどうかが
曖昧になってしまうので、このレポートをみて出来るだけ重複を取り除くのが良いと思います.

Multiple Locations


Multiple Locationsは同一のjarが複数回クラスパスに含まれている場合に出るようです.
今回はなにも出なかったですが、これも異図しない場合がほとんどなので、このレポートを見れば一目瞭然です.


Jar Files

Jar Filesセクションで見ることが出来るのはこのプロジェクトが依存しているjarの一覧です.
最初のDependenciesのところで見せたものと同じように各jarごとにその詳細を見る事が出来ます.

さっと目をとおすだけでも、どれくらいのjarに依存しているのかがわかって、
全体を把握するのに役立ちます.

総括

使い方も簡単で、使いやすいです.
難点はまだベータなのでいくつかのプロジェクトでは上手くレポートが生成できない部分がありました.
あと、ヘルプもまだついていないので、色々な項目の意味とかオプションでこれも出したいよというのは
まだこれからなんだろうなあと思います.


でもこれらを差し引きしても使えそうなので、自分ではどんどん使っていきたいです.