源码编译工具-CompilerUtil
# 介绍
JDK提供了JavaCompiler用于动态编译java源码文件,然后通过类加载器加载,这种动态编译可以让Java有动态脚本的特性,Hutool针对此封装了对应工具。
# 使用
首先我们将编译需要依赖的class文件和jar文件打成一个包:
// 依赖A,编译B和C final File libFile = ZipUtil.zip(FileUtil.file("lib.jar"), new String[]{"a/A.class", "a/A$1.class", "a/A$InnerClass.class"}, new InputStream[]{ FileUtil.getInputStream("test-compile/a/A.class"), FileUtil.getInputStream("test-compile/a/A$1.class"), FileUtil.getInputStream("test-compile/a/A$InnerClass.class") }); 开始编译:
final ClassLoader classLoader = CompilerUtil.getCompiler(null) // 被编译的源码文件 .addSource(FileUtil.file("test-compile/b/B.java")) // 被编译的源码字符串 .addSource("c.C", FileUtil.readUtf8String("test-compile/c/C.java")) // 编译依赖的库 .addLibrary(libFile) .compile(); 加载编译好的类:
final Class<?> clazz = classLoader.loadClass("c.C"); // 实例化对象c Object obj = ReflectUtil.newInstance(clazz); 上次更新: 2025/06/11, 11:31:35