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

createh52个月前 (03-05)技术教程8

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

  • 源码地址:https://gitee.com/noear/liquor

基础编译特性:

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

增值功能:

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

本次更新

  • 添加 DynamicCompiler:addClassPath 方法
  • 添加 DynamicCompiler:getStandardFileManager 方法

新特性示例:

// 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);
    }

    private static class JavaFileSource extends SimpleJavaFileObject {
        public JavaFileSource(File codeSourceFile) {
            super(codeSourceFile.toURI(), Kind.SOURCE);
        } 

        @Override
        public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
            return new String(Files.readAllBytes(Paths.get(this.uri)), StandardCharsets.UTF_8);
        } 
    }
}

相关文章

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

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

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

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

一文弄懂Jasper引擎编译JSP文件的分析说明

基本概念对于基于JSP的Web应用,可以在JSP页面直接编写Java代码,添加第三方库,使用EL表达式.但是最终输出到客户端浏览器的都是标准的HTML页面,包括js,css等等.并不包含Java相关的...