Tôi là người mới sử dụng trên các đại lý java. Tôi tạo ra một lớp HotswapAgent đơn giản (sniffing khỏi Play Khung!):Báo cáo Javaagent "redefineClasses không được hỗ trợ trong môi trường này"
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);
}
}
Với manifest này:
Manifest-Version: 1.0
Premain-Class: path.to.HotswapAgent
Can-Redefine-Classes: true
Và tôi cố gắng tải lại một định nghĩa lớp mới, theo cách này:
CtClass modelClass = ....
...
byte [] bcode = modelClass.toBytecode();
Class c = modelClass.toClass();
modelClass.defrost();
ClassDefinition cdef = new ClassDefinition(c, bcode);
HotswapAgent.reload(cdef);
Tất cả các lớp này đều ở trong một cái bình và cuối cùng tôi nhận được lỗi này (khi gọi lại() gọi lại:
redefineClasses is not supported in this environment
Nhưng trong kê khai được khai báo Can-Redefine-Classes: true
.
JVM là Mac OS X Java 1.6 chuẩn. JVM này hoạt động tốt với JRebel, sử dụng cùng một cơ chế tác nhân.
Có vấn đề gì?