JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Liquor v1.4.0 发布,动态编译即服务!(Java 动态编译神器)

wys521 2025-05-08 07:20:57 精选教程 11 ℃ 0 评论

Liquor 是一个开源的 Java “动态编译即服务” 的实现框架(零依赖),基于 JDK 编译器构建,可以在运行时编译 Java 字符串代码片段、类、方法等。

功能包

大小

描述

org.noear:liquor

24kb

提供 java 动态编译器(支持 jar in jar)

org.noear:liquor-eval

18kb

提供动 java 表达式引擎,java 脚本引擎

兼容 java 所有版本的完整语法(支持 java8 到 java24),由运行时版本决定。

本次更新

  • 优化 liquor 编译错误提示,显示完整的类路径、行号及错误代码
  • 优化 liquor-eval 动态编译类设计,新的执行性能与固定编译类同等性能
  • 优化 liquor-evel 改为 LRUCache 缓存
  • 添加 liquor DynamicCompiler:compile 方法
  • 添加 liquor DynamicClassLoader:getClassBytes 方法

基本特性演示

Java 表达式

Map<String, Object> context = new LinkedHashMap<>();
context.put("a", 1);
context.put("b", 2);

//表达式
System.out.println(Exprs.eval("a + b", context)); //=> 3

Java 脚本(完整的 java 语句、导入、参数、返回申明)

CodeSpec codeSpec = new CodeSpec("return a + b;")
        .imports(System.class)
        .parameters(
                new ParamSpec("a", Integer.class),
                new ParamSpec("b", Integer.class)
        )
        .returnType(Integer.class);
        
System.out.println(Scripts.eval(codeSpec, 1, 2)); //=>3

Java 动态编译(完整的 java 类代码),调试视频:
https://www.bilibili.com/video/BV198QyYQEmw/

String code = """ 
        public class Execable$3 {
            public static int sum(int a, int b) {
              return a + b;
            }
        }
        """;
DynamicCompiler compiler = new DynamicCompiler();
compiler.addSource("Execable$3", code);
compiler.build();

Class<?> clazz = compiler.getClassLoader().loadClass("Execable$1");
int sum = (int) clazz.getDeclaredMethod("sum", int.class, int.class)
        .invoke(null, 1, 2);
System.out.println(sum);//=>3

代码仓库

  • gitee:https://gitee.com/noear/liquor
  • github:https://github.com/noear/liquor

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表