
業務システム(の作成のためのフレームワーク)を解析することになりました。
ソースコードが手に入るものと、クラスファイルしかないクラスがあります。
JudeをつかってUMLのクラス図にしてみたら、クラス数が多いため文字が小さく読みづらく
なってしまいました。各クラスのメソッド一覧とシグネチャがわかればいいので、
クラス図ではなく一覧をテキストで出力するツールを作ろうと思っています。
すると.class や .jarを読む必要があるのですが、J2SE1.4のどのクラスを使うと
できるでしょうか。リフレクション?と思ったのですが、ツールの実行時に読み込まれる.class や .jarではないので
リフレクションでは無理でしょうか?
ヒントだけでもいいのでお願いします。
No.5
- 回答日時:
>クラスローダを使うには、基本クラスの分もすべてそろっていないとだめなのでしょうか
だめですね。親クラスが入っているjarや、nativeメソッドが使うライブラリ、静的に読み込まれる設定ファイルなどをすべて貰って来ないとエラーになります。
無理ならclassファイルのバイナリを解析しないといけません。
・Jadを使う
Jadはディレクトリ内のファイルなどをまとめてデコンパイルできるはずです。
jarを解凍してディレクトリ内のclassファイルを一気にデコンパイルすれば、ソースは手に入ります。
・Judeでソースの雛形を出力
クラス図からソースの雛形を出力できるはずなので、それをコンパイルするなり、
ソースファイルのメソッド宣言を拾うなりする。
・自分で解析ツールを作る
これは「がんばってください」としか言い様が…
なんにせよ、jarも全てそろっていないと解析や開発に出る影響が大きいのでは?多少上司などにごねてでも調達させた方がよさそうです。
この回答への補足
>jarも全てそろっていないと解析や開発に出る影響が大きいのでは?
それもそうですね。ドキュメント類がほとんど無いので、最初は全体像を把握するためにJudeでクラス図を起こすところからはじめたのですが、結局細かいところを調べるには動かせないと困りますね。
足りないJARはWebSphere関連のようなので、何とかならないか相談してみます。
ソースから全体像を把握することって今後もあると思うので、ツール化したいところですが、自信がなくなってきたので今回はJadとjavapとJudeでなんとか解析してみます。
皆様ありがとうございました。
No.4
- 回答日時:
ツールを作るのなら、
.jarファイルから読むのはその分面倒なので、classファイルだけにするのがいいと思います。(.jarファイルはあらかじめ解凍しておく)
で、クラスファイルから情報を取得する方法ですが、
1.ClassLoader(のカスタマイズ)を使って、Classオブジェクトを生成。
(Classファイルをbyte配列に格納し、実行するとClassオブジェクトを取得できる)
2.リフレクションを使ってClassオブジェクトからそのオブジェクトの情報を取得する。
となります。
リフレクションで情報を取って表示するのは結構面倒ですよ。
企画倒れにならないことを祈ります。
この回答への補足
alpha.jar に Sub.class が入っているとして、
SubクラスはSuperクラスを継承しています。
今回、実行に必要なすべてのJARがそろっていないため、Super.classが手元にありません。
URLClassLoaderを使ってみたら、Subクラス のClassオブジェクトを取得しようとしても Super.classに関してjava.lang.NoClassDefFoundError例外が発生してしまいました。
クラスローダを使うには、基本クラスの分もすべてそろっていないとだめなのでしょうか。
ClassLoaderのサブクラスにURLClassLoaderというのを見つけました。JARファイルも読めそうなので、この線から挑戦したいと思います。
ありがとうございました。
No.2
- 回答日時:
逆コンパイルについて
過去にも質問があったので紹介します。
http://okweb.jp/kotaeru.php3?q=1343563
参考URL:http://okweb.jp/kotaeru.php3?q=1343563
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipse・プロジェクトで、フォ...
-
classファイルについて
-
SVFの設定について:クラスパス...
-
eclipse でclassesフォルダーが...
-
VisualStudioでC++クラスを追加...
-
【Eclipse】パッケージ・エクス...
-
jdbcドライバのjarファイルにク...
-
ResourceBundleクラスの使い方
-
java クラスファイルとソースコ...
-
packageが見つからないエラー
-
javaクラスファイルをEclipseで...
-
jarファイルの解凍ができない
-
【Eclipse】逆コンパイルでエラ...
-
eclipseでjarのエクスポートが...
-
Eclipse「リフレッシュ」と「ク...
-
earファイルを展開する方法
-
JSP内で外部jsファイルを指定する
-
EclipseでHTTP404エラーが出る。
-
Warファイルの解凍について質問...
-
「main メソッドを持つクラスが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipse・プロジェクトで、フォ...
-
classファイルについて
-
SVFの設定について:クラスパス...
-
earファイルを展開する方法
-
javaクラスファイルをEclipseで...
-
eclipse でclassesフォルダーが...
-
Eclipse「リフレッシュ」と「ク...
-
ファイルのパスの取得について
-
jdbcドライバのjarファイルにク...
-
【Eclipse】パッケージ・エクス...
-
「main メソッドを持つクラスが...
-
VisualStudioでC++クラスを追加...
-
EclipseでのJSP・Servlet開発に...
-
EclipseでHTTP404エラーが出る。
-
「削除するか、クラスパスの正...
-
java クラスファイルとソースコ...
-
EclipseでのJDBCドライバについて
-
プログラム実行の際に、「ソー...
-
「メイン・マニフェスト属性が...
-
appletviewerが起動しません。
おすすめ情報