【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )

简介: 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )

一、编译 ASTTransformation


先进入到 Groovy 代码所在目录 执行


cd Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy


命令 ( 默认也在这个目录 ) , 然后执行


groovyc -d classes MyASTTransformation.groovy


命令 , 编译 ASTTransformation 实现类 ; 编译后会在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\classes 目录生成 MyASTTransformation.class 文件 ;


image.png


二、打包 ASTTransformation 字节码文件


将编译后的 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\classes\MyASTTransformation.class 文件进行打包 , 执行


jar -cf test.jar -C classes . -C resources .


命令 , 在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy 目录下生成了 test.jar 文件 ;

image.png


三、编译 Groovy 类同进行编译时处理


Groovy.groovy 脚本的内容如下 , 其中定义了一个 Student 类 ,


class Student{
    def name
    def hello(){
        println "hello"
    }
}
def student = new Student()


执行


groovy -classpath test.jar Groovy.groovy


命令 , 执行 Groovy.groovy 脚本 , 执行时先进行编译 , 然后再执行 , test.jar 中包含了 ASTTransformation , 会在编译时处理 Groovy.groovy 脚本中的相关类 ;


执行结果如下 :


[org.codehaus.groovy.ast.ModuleNode@2609b277]
org.codehaus.groovy.control.SourceUnit@1fd14d74



image.png

目录
相关文章
|
虚拟化 索引
看一下ARM的IP:SMMUU
看一下ARM的IP:SMMUU
613 1
|
Java C++ 网络架构
【Java】@ApiOperation vs @ApiResponse in Swagger
【Java】@ApiOperation vs @ApiResponse in Swagger
209 0
|
SQL Java 数据库连接
使用Mybatis报错:java.lang.NullPointerException排查方案
使用Mybatis报错:java.lang.NullPointerException排查方案
2331 0
使用Mybatis报错:java.lang.NullPointerException排查方案
|
4月前
|
安全 算法 数据安全/隐私保护
远控安全进阶之战:TeamViewer/ToDesk/向日葵设备安全策略对比
在数字化时代,卓越的远程控制软件需兼顾功能与体验,包括流畅连接、高清画质、低门槛UI设计、毫秒级延迟及多功能性,同时要有独树一帜的远控安全技术,通过前瞻性安全策略阻挡网络风险,为用户打造全方位安全体验,在基础安全防护上不断创新。本文选取了当下热门的TeamViewer、ToDesk、向日葵三款远程控制软件,从软件介绍、远控安全策略等多个维度进行深入对比,以呈现一场精彩的远控软件安全进阶“大比拼”。
330 13
|
11月前
|
域名解析 弹性计算 安全
无法ping通ECS服务器公网IP的排查方法
无法ping通ECS服务器公网IP的排查方法
|
9月前
|
JSON 前端开发 Java
【SpringMVC】基础入门实战(3)
SpringMVC获取Header,返回静态页面,返回数据(Controller),返回数据@ResponseBody,返回HTML代码片段,返回JSON,设置状态码,设置Header
|
存储 监控 安全
内存卡数据恢复,3个方法帮你找回丢失的照片和视频
今天,针对内存卡数据恢复,本期做一个详细的归纳,分析常见的数据丢失原因、详细的数据恢复步骤、以及如何保护内存卡数据。
内存卡数据恢复,3个方法帮你找回丢失的照片和视频
|
Java 开发者
Java一分钟之-Groovy与Java混合编程
【6月更文挑战第13天】本文探讨了Groovy与Java的混合编程,强调了Groovy在JVM上的动态特性及其与Java的高兼容性。文章指出,尽管二者可无缝共存,但仍存在类型不匹配、闭包与匿名内部类差异及语法糖导致的问题。为避免这些问题,建议在Groovy中显式指定类型、理解闭包与匿名类的区别,并制定统一编码规范。通过实例展示了Java调用Groovy脚本和Groovy调用Java类的方法,强调理解两种语言特性的重要性,以实现更高效、维护性更强的系统。
434 3
Java一分钟之-Groovy与Java混合编程
|
Java Linux Windows
记一次排查循环依赖的经历
记一次排查循环依赖的经历