动态编译 Java 的神器 Liquor v1.3.9 发布
Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段、类、方法等。
- 源码地址:https://gitee.com/noear/liquor
基础编译特性:
- 可以单个类编译
- 可以多个类同时编译
- 可以增量编译
增值功能:
- java 表达式引擎
- java 脚本引擎(支持 java8 到 java23 语法)
本次更新
- 添加 DynamicCompiler:addClassPath 方法
- 添加 DynamicCompiler:getStandardFileManager 方法
新特性示例:
// A.java
public class A { private B b = new B(); }
// B.java
public class B {}
// Demo.java
public class Demo {
@Test
public void test() throws Exception {
final DynamicCompiler dynamicCompiler = new DynamicCompiler();
dynamicCompiler.addClassPath(new File(".../test/")); //这是重点
dynamicCompiler.addSource(new JavaFileSource(new File(".../test/A.java")));
dynamicCompiler.build();
final Class> clazz = dynamicCompiler.getClassLoader().loadClass("test.A");
System.out.printf("clazz: %s\n", clazz);
}
private static class JavaFileSource extends SimpleJavaFileObject {
public JavaFileSource(File codeSourceFile) {
super(codeSourceFile.toURI(), Kind.SOURCE);
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
return new String(Files.readAllBytes(Paths.get(this.uri)), StandardCharsets.UTF_8);
}
}
}