• ベストアンサー

JAR内のクラス一覧と、メソッド一覧の取得方法

業務システム(の作成のためのフレームワーク)を解析することになりました。 ソースコードが手に入るものと、クラスファイルしかないクラスがあります。 JudeをつかってUMLのクラス図にしてみたら、クラス数が多いため文字が小さく読みづらく なってしまいました。各クラスのメソッド一覧とシグネチャがわかればいいので、 クラス図ではなく一覧をテキストで出力するツールを作ろうと思っています。 すると.class や .jarを読む必要があるのですが、J2SE1.4のどのクラスを使うと できるでしょうか。リフレクション?と思ったのですが、ツールの実行時に読み込まれる.class や .jarではないので リフレクションでは無理でしょうか? ヒントだけでもいいのでお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

javapコマンドで逆コンパイルしてみては? (ライセンスの問題に躓きそうですね…)

thamansa
質問者

お礼

逆コンパイルはjadしか使ったことが無かったのですが、 javapコマンドなら、今回の目的に一番近い出力が得られそうです。 ありがとうございました。

その他の回答 (4)

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.5

>クラスローダを使うには、基本クラスの分もすべてそろっていないとだめなのでしょうか だめですね。親クラスが入っているjarや、nativeメソッドが使うライブラリ、静的に読み込まれる設定ファイルなどをすべて貰って来ないとエラーになります。 無理ならclassファイルのバイナリを解析しないといけません。 ・Jadを使う Jadはディレクトリ内のファイルなどをまとめてデコンパイルできるはずです。 jarを解凍してディレクトリ内のclassファイルを一気にデコンパイルすれば、ソースは手に入ります。 ・Judeでソースの雛形を出力 クラス図からソースの雛形を出力できるはずなので、それをコンパイルするなり、 ソースファイルのメソッド宣言を拾うなりする。 ・自分で解析ツールを作る これは「がんばってください」としか言い様が… なんにせよ、jarも全てそろっていないと解析や開発に出る影響が大きいのでは?多少上司などにごねてでも調達させた方がよさそうです。

thamansa
質問者

補足

>jarも全てそろっていないと解析や開発に出る影響が大きいのでは? それもそうですね。ドキュメント類がほとんど無いので、最初は全体像を把握するためにJudeでクラス図を起こすところからはじめたのですが、結局細かいところを調べるには動かせないと困りますね。 足りないJARはWebSphere関連のようなので、何とかならないか相談してみます。 ソースから全体像を把握することって今後もあると思うので、ツール化したいところですが、自信がなくなってきたので今回はJadとjavapとJudeでなんとか解析してみます。 皆様ありがとうございました。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

ツールを作るのなら、 .jarファイルから読むのはその分面倒なので、classファイルだけにするのがいいと思います。(.jarファイルはあらかじめ解凍しておく) で、クラスファイルから情報を取得する方法ですが、 1.ClassLoader(のカスタマイズ)を使って、Classオブジェクトを生成。 (Classファイルをbyte配列に格納し、実行するとClassオブジェクトを取得できる) 2.リフレクションを使ってClassオブジェクトからそのオブジェクトの情報を取得する。 となります。 リフレクションで情報を取って表示するのは結構面倒ですよ。 企画倒れにならないことを祈ります。

thamansa
質問者

お礼

ClassLoaderのサブクラスにURLClassLoaderというのを見つけました。JARファイルも読めそうなので、この線から挑戦したいと思います。 ありがとうございました。

thamansa
質問者

補足

alpha.jar に Sub.class が入っているとして、 SubクラスはSuperクラスを継承しています。 今回、実行に必要なすべてのJARがそろっていないため、Super.classが手元にありません。 URLClassLoaderを使ってみたら、Subクラス のClassオブジェクトを取得しようとしても Super.classに関してjava.lang.NoClassDefFoundError例外が発生してしまいました。 クラスローダを使うには、基本クラスの分もすべてそろっていないとだめなのでしょうか。

回答No.3

Eclipseで開くのもいいかもしれません。

thamansa
質問者

お礼

クラスの数が少なければEclipseが一番手っ取り早いのですよね。ところが いかんせんクラス数がおおいので、全体を把握するために、各クラスの継承関係とメソッドのシグネチャだけみられるようなものを模索中です。 (クラス図やシーケンス図も一緒に提供されていたらそれだけで解決なんですが・・・)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

逆コンパイルについて 過去にも質問があったので紹介します。 http://okweb.jp/kotaeru.php3?q=1343563

参考URL:
http://okweb.jp/kotaeru.php3?q=1343563

関連するQ&A