Janino 不思进取了?Java 动态编译 的新神器 Liquor v1.3.10 发布

createh51周前 (03-05)技术教程2

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\");");

相关文章

java编译后的.class文件打包为jar包

前提:1、已经有编译好的java文件Main.class2、有java编译环境第1步骤,新建一个文件,文件名:MANIFEST.MF内容:Manifest-Version: 1.0 Main-Clas...

【测试】在windows下编译java程序,在centos下执行

windows下:操作系统:win10java版本:1.8.0_441javac编译得到的文件:Main.class、Main.jarwindows下执行:centos下:操作系统:CentOS Li...

java把编译的class文件打包为jar的意义

将.class 文件打包为.jar 文件具有以下几方面的重要意义:方便部署和使用:JAR 文件可以将多个 .class 文件、资源文件(如图片、配置文件等)打包成一个单独的可执行文件,方便应用程序的分...

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

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

通过 GraalVM 将 Java 程序编译成本地机器码后,效率能和rust比吗?

通过GraalVM将Java程序编译成本地机器码后,其效率能否与Rust相比,是一个复杂的问题,涉及多个方面的考量。以下是对这一问题的详细分析:一、GraalVM的优势多语言支持:GraalVM是一个...