LoginSignup
1
5

More than 3 years have passed since last update.

JD-Core を使って WinMerge Plugin 付きの コマンドラインインタフェース 作りました

Last updated at Posted at 2020-10-04

01_title.jpg

JD-CLIについて

コマンドライン上で叩いて、コマンドライン上に結果が出力されるJava デコンパイラーです。

JDについて

Eclipseでも使用されているJava5以降のclassファイルもでコンパイル可能なJava デコンパイラー
(参照)JD Projectへ
JD-CLIは、そのJDで使用されているコアライブラリJD-Coreを使用させていただいています。

使用方法

こちらへ移動して
Assetsにある"jd-cli-windows-1.0.0.zip"のzipファイルをダウンロード。
解凍後すると中身はこのような感じです。
02_arch.jpg
コマンドラインから、jd-cli [デコンパイルしたいファイル]で結果でます。
09_res_jd.jpg
その他のオプションは以下の通り

> jd-cli.exe -h
example:
jd-cli(.exe) Example.class
jd-cli(.exe) -b example.jar org.aaa.Example.class
jd-cli(.exe) -b org\aaa Example.class

usage:
 classes...      : Specify the class files...
 -b (--base) VAL : Specify the reference directory or Jar file.
 -h (--help)     : Show helps. (default: false)
 -l (--loc)      : Show full classpath. (default: false)
 -m (--meta)     : Show metadatas.(e.g. Filename, Java versions..) (default:false)
 -n (--line)     : Show Line Number. (default: false)
 -r (--real)     : Realignment Line Number. (default: false)
 -u (--unicode)  : Escapes Unicode Charset. (default: false)

WinMerge Pluginについて

解凍フォルダにあるWinMergePluginsというフォルダがあって、たどっていくと、exe用、jar用の2種類のフォルダがあります
たとえば、For exeの内容は、以下で
03.jpg
WinMergeがインストールされているのであれば、フォルダ内install.batを管理者権限で実行すると、インストールされているフォルダにコピーされます。
WinMergeを起動後、プラグイン設定にコピーした同名のファイル(この場合、jd_exe)が記載されていればOK
10_jd_plugin.gif
使用時に、展開プラグインで開く、自動展開を設定するなどしてご使用ください。

以下、最新common-lang3のcommons-lang3-3.10とcommons-lang3-3.11を比較した結果。
04_res_exec.gif
自動展開で、87013ms(317ファイル)くらいで比較します。
(ちなみにJarバージョンだと85174ms。およそ1ファイルに付き10ms早いみたいですね.java8以上入れておられて、パスが通っておられる方は、Jarバージョンのほうが早いかも。

ソースは...

JD-ECLIPSEソースをガン見して、良いところをリスペクト。そのまま持ってきたのもあります。(もちろんライセンス部分は消しませんよ。)
ファイル名フルパスが、デフォルトだったので、それだとdiffのとき全ファイル引っかかるため
フルパスでないバージョンも対応できるように直しました。
あと、ファイルパスにUNICODEが入っていた場合の置換処理が誤っていたので直しました。
(org/util/readerみたいなパスがorg//til/readerとなってしまっていたのを解消)

余談

以下、余談ですが、、、

かぶってた...

作るとき調べて、無かったから作ったのですが、、、すでに同じことをされている方がおりました。。。

kwart/jd-cmd jd-cmd - Command line Java Decompiler

exe化してないくらいでほぼ同じ考え。出力パターンを変えられる分あちらのほうが高機能な感じ?
まぁ使い分けてくださいということで。。。

OSX, Linux版もあるけれど

JD-GUIのGradleを参考に作らせてもらったので、実はソースをチェックアウトして

gradlew build

すれば、Linux版もOSX版も出力されたりします。
でもテストしてないから前には出してません。なんとなくGUI特化のオプションが付いてそう。

最後に

久しぶりのJava関連の(というか記事自体の)更新。
WinMergeでclass比較したいという願望からはじめました。最後の最後で先人がいて、ずっこけましたが
jarのminify化だの、launch4jでのExec化だの、distributionsでのおまとめZip化だの、とても勉強になりました。
みなさんgradle使いこなしててすごいですね。。。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5