6
私はJavaエージェントで初心者です。 私は(プレイからスニッフィングフレームワーク!)シンプルHotswapAgentクラスを作成しました:Javaエージェントは "redefineClassesはこの環境ではサポートされていません"と報告しています
Manifest-Version: 1.0
Premain-Class: path.to.HotswapAgent
Can-Redefine-Classes: true
そして、私はこのように、新しいクラス定義をリロードしてみてください:このマニフェストでは
public class HotswapAgent {
static Instrumentation instrumentation;
public static boolean enabled = false;
public static void premain(String agentArgs, Instrumentation instrumentation)
{
HotswapAgent.instrumentation = instrumentation;
HotswapAgent.enabled = true;
}
public static void reload(ClassDefinition... definitions)
throws UnmodifiableClassException, ClassNotFoundException
{
instrumentation.redefineClasses(definitions);
}
}
CtClass modelClass = ....
...
byte [] bcode = modelClass.toBytecode();
Class c = modelClass.toClass();
modelClass.defrost();
ClassDefinition cdef = new ClassDefinition(c, bcode);
HotswapAgent.reload(cdef);
これらのクラスはすべてjarファイルであり、最後にこのエラー(reload()呼び出し時)が得られます。
redefineClasses is not supported in this environment
しかし、マニフェストではCan-Redefine-Classes: true
と宣言されています。
JVMは標準のMacOS X Java 1.6 VMです。このJVMは、同じエージェントメカニズムを使用するJRebelでうまく動作します。
どういうところが間違っていますか?