Janino 不思进取了?Java 动态编译 的新神器 Liquor v1.3.10 发布
Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),基于 javac 构建,可在运行时编译 Java (支持 java8 到 java23 语法)字符串代码片段、类、方法等。
- 源码地址:https://gitee.com/noear/liquor
基础编译特性:
- 可以单个类编译
- 可以多个类同时编译
- 可以增量编译
增值特性:
- java 表达式引擎
- java 脚本引擎
本次更新
- 添加 Scripts:eval(String, Map) 便利方法
- 优化 LiquorEvaluator 编译的脚本允许显示抛出异常
特性演示
- 动态编译器应用
//可以复用(不要,不断的新建)
DynamicCompiler compiler = new DynamicCompiler();
String className = "HelloWorld";
String classCode = "import java.util.HashMap;\n\n"+
"public class HelloWorld { " +
" public static void helloWorld() { " +
" System.out.println(\"Hello, world!\"); " +
" } " +
"}";
//添加源码(可多个)并 构建
compiler.addSource(className, classCode);
compiler.build();
Class> clazz = compiler.getClassLoader().loadClass(className);
clazz.getMethod("helloWorld").invoke(null);
- 表达式应用
Map ctx = new HashMap<>();
ctx.put("b", 3);
ctx.put("a", 22);
Exprs.eval("b + a", ctx); //=>25
- 脚本应用
Scripts.eval("System.out.println(\"hello word\");");