前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )

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

作者头像
韩曙亮
发布2023-03-30 11:05:35
4220
发布2023-03-30 11:05:35
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、编译 ASTTransformation


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

代码语言:javascript
复制
cd Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy

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

代码语言:javascript
复制
groovyc -d classes MyASTTransformation.groovy

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

在这里插入图片描述
在这里插入图片描述

二、打包 ASTTransformation 字节码文件


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

代码语言:javascript
复制
jar -cf test.jar -C classes . -C resources .

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

在这里插入图片描述
在这里插入图片描述

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


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

代码语言:javascript
复制
class Student{
    def name
    def hello(){
        println "hello"
    }
}

def student = new Student()

执行

代码语言:javascript
复制
groovy -classpath test.jar Groovy.groovy

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

执行结果如下 :

代码语言:javascript
复制
[org.codehaus.groovy.ast.ModuleNode@2609b277]
org.codehaus.groovy.control.SourceUnit@1fd14d74
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、编译 ASTTransformation
  • 二、打包 ASTTransformation 字节码文件
  • 三、编译 Groovy 类同进行编译时处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档