一、为什么需要动态编译?
想象这样一个场景:你的系统需要实时更新业务规则,但重启服务会导致
中断;或者你正在开发一款低代码平台,允许用户编写自定义逻辑并即时生效。这时,动态编译并加载 Java 类的能力就显得至关重要。
动态编译的核心价值:
热更新:无需重启服务,实时加载新逻辑。
插件化架构:支持第三方扩展模块。
灵活性与敏捷性:快速响应业务需求变化。
方法一:
引入外部依赖库
二、编译的代码使用了外部依赖库
这时候就需要修改com.itranswarp.compiler的源码了,可以把类复制一份,参考如下代码传递外部依赖库
可以通过 -classpath 参数来指定类路径
避坑
JDK 环境问题:确保运行环境为 JDK(而非 JRE),否则 JavaCompiler 不可用。
类名与包名:动态类的包名需与 className 字段严格一致。
依赖管理:若动态代码依赖其他库,需在编译时指定 -classpath 参数。
* 调试技巧:将动态生成的字节码保存到磁盘,方便反编译检查。