Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段、类、方法等。
开源项目地址:
- gitee: https://gitee.com/noear/liquor
- github: https://github.com/noear/liquor
基础编译特性:
- 可以单个类编译
- 可以多个类同时编译
- 可以增量编译
增值功能:
- java 求值表达式引擎
- java 脚本引擎(支持 java8 到 java24 语法)
本次更新
- 使用 getTypeName 替换 getCanonicalName (优化 arm jdk 兼容性)
- 优化 LiquorEvaluator:addSource ';' 号补全处理
- 简化 LiquorEvaluator clazzName 生成,避免冲突可能
- 添加 JavaFileSource 类
特性展示
(1)动态编译展示(编译即服务!)
// 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); } }
(2)求值表示式展示
System.out.println(Exprs.eval("1+1"));
(3)脚本展示
Scripts.eval("System.out.println(\"hello word\");");
(4)JSR223 规范脚本展示
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("java"); System.out.println(scriptEngine.eval("return 2*6-(6+5);"));
还没有评论,来说两句吧...