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

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

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...

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

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

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

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

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

Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),基于 javac 构建,可在运行时编译 Java (支持 java8 到 java23 语法)字符串代码片段、类、方法等。源...

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

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