初めてクラスが正常に作成されましたが、次回にクラスに変更があったとき(いくつかの変数を追加するなど)にエラーが発生します。 以下は私のコードです。既にロードされている実行時にJavaクラスを変更したい。これを行う方法?
ClassPool pool = ClassPool.getDefault();
CtClass cc=null;
final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
if (contextClassLoader != null)
{
pool.insertClassPath(new LoaderClassPath(contextClassLoader));
}
try{
cc = pool.makeClass(className);
cc.defrost();
for (Entry<String, Class<?>> entry : properties.entrySet()) {
cc.addField(new CtField(resolveCtClass(entry.getValue()), entry.getKey(), cc));
// add getter
cc.addMethod(generateGetter(cc, entry.getKey(), entry.getValue()));
// add setter
cc.addMethod(generateSetter(cc, entry.getKey(), entry.getValue()));
}
cc.addConstructor(generateConstructor(cc,properties,className));
CtConstructor defaultCons=new CtConstructor(NO_ARGS, cc);
defaultCons.setBody(";");
cc.addConstructor(defaultCons);
return cc.toClass();
}catch(Exception e){
cc = pool.get(className);
cc.detach();
cc = pool.makeClass(className);
cc.defrost();
for (Entry<String, Class<?>> entry : properties.entrySet()) {
cc.addField(new CtField(resolveCtClass(entry.getValue()), entry.getKey(), cc));
// add getter
cc.addMethod(generateGetter(cc, entry.getKey(), entry.getValue()));
// add setter
cc.addMethod(generateSetter(cc, entry.getKey(), entry.getValue()));
}
cc.addConstructor(generateConstructor(cc,properties,className));
CtConstructor defaultCons=new CtConstructor(NO_ARGS, cc);
defaultCons.setBody(";");
cc.addConstructor(defaultCons);
return **cc.toClass();** // getting error at this line
}
*この行にエラーが表示されます。*メッセージを教えてください。 – Jens
javassist.CannotCompileException:java.lang.LinkageError:loader(org/jboss/modules/ModuleClassLoaderのインスタンス):名前の重複クラス定義を試みました –
そのメッセージはちょっと私の答えにある説明に下線を引いています... – GhostCat