0
私はJavassistを使用して簡単な計測エージェントを作成しようとしています。classPool.get(className)throws RuntimeExceptionクラスが見つかりません
public class Agent implements ClassFileTransformer {
protected Instrumentation instrumentation;
protected ClassPool classPool;
public Agent(Instrumentation instrumentation){
this.instrumentation = instrumentation;
this.classPool = ClassPool.getDefault();
this.instrumentation.addTransformer(this);
}
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
try {
System.out.printf("%s.transform: %s\n", this.getClass().getCanonicalName(), className);
classPool.insertClassPath(new ByteArrayClassPath(className, classfileBuffer));
CtClass ctClass = classPool.get(className); /* <- throws error */
}
catch (Exception ex){
System.out.println(ex);
return null;
}
}
}
しかし、私は次のエラーを取得:
java.lang.RuntimeExceptionをします。java/LANG /起動/ MethodHandleImplを見つけることができません:java.lang.invoke.MethodHandleImplは、java/LANG /呼び出しで見つかりました/MethodHandleImpl.class
この例外をスローしない唯一のクラスは、IDE(IntelliJ IDEA)のプロジェクトのものです。
クラスパスから手動でパスを追加しようとしましたが、それでもどちらも役に立ちませんでした。すなわち
String[] cpEntries = System.getProperty("java.class.path").split(File.pathSeparator);
for (String cpEntry : classpathEntries)
classPool.insertClassPath(cpEntry);
私は何が欠けていますか?ありがとう!