JLivePatcher は、特定クラスのみを java 起動時、または既存プロセスに対して差し替える JVMTI java エージェントです。これにより、アプリケーションだけでなくフレームワーク等のパッチ作業でバイナリ全体を入れ替える必要がなくなります。
The GNU Lesser General Public License, version 3.0
Java SE 6 以降 (動作確認は OpenJDK8 @ Fedora23 x64で行っています。
添付の build.xml を使って ant でビルドしてください (all ターゲット)。
- 差し替えるクラスファイルを用意してください。
- Java のプロパティファイル形式で、Key にクラス名(FQCN)、Value に新しいクラスファイルを記述してください。(test ディレクトリの retransform.properties を参考にしてください。)
- 起動時差し替えの場合
- java起動オプションに
-javaagent:jlivepatcher.jar=<プロパティファイル>
を追記します。
- java起動オプションに
- 既存プロセスに対する差し替えは、以下3つのいずれかの方法で可能です。
自分で Attach API を用いたプログラムを書いてアタッチします。JLivePatcher でも AttacherMain.java で利用しています。
dist/jliveattacher
を使用し、以下のように起動します。
$ jlivepatcher <PID> <プロパティファイル>
jcmd
の JVMTI.agent_load
サブコマンドを使用します。
$ jcmd <PID> /path/to/jlivepatcher.jar <プロパティファイル(フルパス)>