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

基础编译特性:

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

增值特性:

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

本次更新

  • 添加 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<String, Object> 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 的神器 Liquor v1.3.10 发布的更多相关文章

  1. Java程序动态编译Java源文件

    最近接触到公司一个项目,需要将生成的源码动态编译,记录下学习过程. 先贴出官网推荐写法: JavaCompiler.CompilationTask getTask(Writer out,        ...

  2. 高性能 Java 框架。Solon v1.12.3 发布(春节前兮的最后更)

    一个更现代感的 Java "生态型"应用开发框架:更快.更小.更自由.不是 Spring,没有 Servlet,也无关 JavaEE:新兴独立的轻量生态 (已有150来个生态插件) ...

  3. (转载)JAVA动态编译--字节代码的操纵

    在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...

  4. java动态编译笔记

    1 前言 Java的动态编译知识,真真在实际开发中并不是经常遇到.但是学习java动态编译有助于我们从更深一层次去了解java.对掌握jdk的动态代理模式,这样我们在学习其他一些开源框架的时候就能够知 ...

  5. Java动态编译

    程序产生过程 下图展示了从源代码到可运行程序的过程,正常情况下先编译(明文源码到字节码),后执行(JVM加载字节码,获得类模板,实例化,方法使用).本文来探索下当程序已经开始执行,但在.class甚至 ...

  6. java动态编译类文件并加载到内存中

    如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...

  7. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  8. JAVA动态编译辅助类

    一.场景 平时我们学学用到在JVM运行时,动态编译.java的源代码情况,比如作为灵活的配置文件.这时候就要用到动态编译,参考下列. 二.类内容 1.引入依赖: <!-- https://mvn ...

  9. Java Web部署到tomcat后,使用动态编译无法找到相关类的解决方案

    一.问题 动态编译java文件时(这个java文件虽引用了第三方jar包),如果这个过程发生在java命令行程序中,则正常编译.如果发生在JavaWeb中,然后此Java部署到Tomcat之后,执行动 ...

  10. Java_java动态编译整个项目,解决jar包找不到问题

    java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/ 动态将java文件编译为class文件解决方案:将temp\sdl\src目录 ...

随机推荐

  1. 打包jar 程序,同时将依赖报一起打包

    1.概述 有些时候,我们打包一个java 程序,我需要将所有的依赖也一起打包,这样执行起来方便. 2.我们可以使用maven 插件实现 <build> <plugins> &l ...

  2. Java和.Net互相使用RSA加密时的问题和处理方法

    前言 我们产品是使用JAVA语言开发的,有个供第三方获取Token的接口,过程大概就是第三方先调一个注册接口,获取一个RSA公钥,然后用通过公钥加密后的一些认证信息调用获取Token的接口,如果信息无 ...

  3. arcpy获取polygon内环

    当使用arcpy获取polygon几何的时候,不能像ao一样获取到内外环,只能获取到单个部件.而part返回的即是一个点组了. 所以只能通过None对象进行分割,确定部件内的内外环.一个part内,只 ...

  4. oracle中id自增长(转)

    首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR( ...

  5. Object-relational impedance mismatch (转载)

    http://www.agiledata.org/essays/impedanceMismatch.html Why does this impedance mismatch exist?  The ...

  6. 【C#】【平时作业】习题-11-ADO.NET

    选择题 1.下列ASP.NET语句(B)正确地创建了一个与mySQL数据库和服务器的连接. A.SqlConnection con1 = new Connection("Data Sourc ...

  7. 测试覆盖率 Java 覆盖率 Jacoco 插桩的不同形式总结和踩坑记录

    https://testerhome.com/topics/20632 关于Jacoco的小结和踩坑记录 一.概述 测试覆盖率,老生常谈的话题.因为我测试理论基础不是很好,就不提什么需求覆盖率啦这样那 ...

  8. 龙哥量化:通达信分时均线在5分钟K线图上显示

    代写技术指标.量化策略,微信:Long622889 龙哥QQ:591438821 T1:=DAY<>REF(DAY,1);T2:=BARSLAST(T1)+1;JX:SUM(AMO,T2) ...

  9. Datawhale冬令营第二期!Task2🌼

    Datawhale冬令营第二期-Task2:学AI编程的Prompt工程,提升效果 对应链接:https://www.datawhale.cn/activity/116/23/95?rankingPa ...

  10. [转]win10 vue-cli 下载成功,显示 vue不是内部或外部命令,也不是可运行的程序

    vue不是内部或外部命令,也不是可运行的程序 1.安装vue-cli npm install -g @vue/cli 2.查看是否安装成功 vue -V 经过上述步骤,一般在CMD窗口输入" ...