Compilation 使用javassist创建一个类并从代码加载

Compilation 使用javassist创建一个类并从代码加载,compilation,runtime,javassist,Compilation,Runtime,Javassist,我需要在运行时使用javassist从代码编译和加载一个类。代码有接口和参数 package my.package.functions; 导入my.package.cargo.cargo; 导入my.package.cargo.CargoItem; 公共接口功能{ public void execute(Cargo-Cargo,CargoItem-CargoItem,字符串[]参数); } 字符串中的代码示例 包myfunctionspackage//文件夹中的动态类被持久化 导入my.pac

我需要在运行时使用javassist从代码编译和加载一个类。代码有接口和参数

package my.package.functions;
导入my.package.cargo.cargo;
导入my.package.cargo.CargoItem;
公共接口功能{
public void execute(Cargo-Cargo,CargoItem-CargoItem,字符串[]参数);
}
字符串中的代码示例

包myfunctionspackage//文件夹中的动态类被持久化
导入my.package.cargo.cargo;
导入my.package.cargo.CargoItem;
公共类myFunction实现my.package.functions.CargoFunction{
@凌驾
public void execute(Cargo-Cargo,CargoItem-CargoItem,字符串[]参数){
//一些代码
}
}
下面是我遇到问题的javassist方法

publicstaticcargofunction-CargoFunctionCompile(stringclassnamepath,stringclasscode){
CargoFunction-CargoFunction=null;
ClassPool cp=ClassPool.getDefault();
CtClass cc=cp.get(classNamePath);
CTM方法=cc.getDeclaredMethod(“执行”);
m、 setBody(类代码);
c类=cc.toClass();
@抑制警告(“未选中”)
构造函数=(构造函数)c.getDeclaredConstructor();
CargoFunction obj=constructor.newInstance();
cargoFunction=(cargoFunction)obj;
退货功能;
}

注意:我尝试过使用JavaCompiler/CompilationTask,但在Maven构建之后,Spring URLClassLoader中出现了与Java冲突的问题。也就是说,它可以在Eclipse中运行,但在构建胖罐后失败。

欢迎使用SO。我不完全理解你的问题。代码片段#2是否用作#3中的
classCode
?如果是这样的话,我想它不起作用,因为您不能用完整的类定义覆盖方法体。如果我误解了你的意思,请编辑这个问题,把它变成一个新的问题。这比一组不连贯的代码片段要好得多,我无法编译和运行这些代码片段来重现您的情况。用一句话描述你的Maven+Spring+FatJar问题也没有多大帮助。