动态编译 Java 的神器 Liquor v1.3.10 发布

Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段、类、方法等。

基础编译特性:

  • 可以单个类编译
  • 可以多个类同时编译
  • 可以增量编译

增值特性:

  • java 表达式引擎
  • java 脚本引擎(支持 java8 到 java23 语法)

本次更新

  • 添加 Scripts:eval(String, Map) 便利方法
  • 优化 LiquorEvaluator 编译的脚本允许显示抛出异常

特性演示

  • 动态编译器应用
java 复制代码
//可以复用(不要,不断的新建)
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);
  • 表达式应用
java 复制代码
Map<String, Object> ctx = new HashMap<>();
ctx.put("b", 3);
ctx.put("a", 22);

Exprs.eval("b + a", ctx); //=>25
  • 脚本应用
java 复制代码
Scripts.eval("System.out.println(\"hello word\");");
相关推荐
亦暖筑序1 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏2 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev3 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还19 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩19 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia20 小时前
Mybatis的日志输入
java
亦暖筑序21 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530141 天前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao1 天前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿1 天前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试