本文简单研究一下Groovy的实现原理。我们会下载groovy源码并编译运行。最后简单的分析一下源代码原理。
1.实验环境
Win7 64bit
JDK 1.7.0_72
2.编译Groovy2.5
2.1 首先去以下地址clone代码
https://github.com/apache/incubator-groovy
本文写作时Groovy代码的版本是groovy2.5.0-SNAPSHOT
2.2 准备gradle编译环境
gradlew
用这个命令事先不需要安装gradle,它会自己去下载一个合适的gradle版本,下载下来的会放到C:\Users\{user}\.gradle目录下
2.3 编译
gradlew clean dist
这个挺有意思的,用gradle来编译groovy?到底是鸡生蛋还是蛋生鸡?
经过漫长的等待后(大约30分钟),编译完成。
2.4 生成eclipse工程
gradlew jar eclipse
然后就可以导入eclipse慢慢研究了。(建议用GGTS)
2.5 几个不错的地方:
1.用asciidoctor生成教程文档。生成的文档在target\asciidoc\html5下
2.javadoc,groovydoc也是自动生成的,具体如何实现的还没有研究。
3.研究Groovy 1.0-alpha-1
一上来直接研究庞大的2.5版肯定是啃不动的,当然也可以慢慢啃。
为了降低难度,提高学习积极性,我们这里简单研究下最早的第一版groovy是如何实现的,那时候肯定还没有gradle呢。
通过用git查看代码历史,时间回到了2003年————12年前!我们发现了maven的踪迹。最早的groovy还是用maven 1编出来的,用的是asm,然后文档是用xdoc写的。
3.1 切换到groovy最早的一个版本。
git checkout -b first_ver d1963f1be79aeb0dca8aa012659f725e1ffc96f9
3.2 下载maven1.1
http://archive.apache.org/dist/maven/binaries/maven-1.1.zip
没办法,最早的版本是用maven1做构建的。。。
3.3 将maven 1的PATH设好,然后编译。
maven groovy:make-install
出错dom4j-1.7-20060614.jar找不到
解决方法,手动下载
http://mirrors.ibiblio.org/maven2/maven/dom4j/1.7-20060614/dom4j-1.7-20060614.jar
然后复制到C:\Users\{user}\.maven\repository\maven\jars下面
再次执行上面的命令即可编译通过。
在target下可以找到编出来的groovy-1.0-alpha-1.jar
3.4 测试
修改target\install\bin\groovy.bat 第60行
set GROOVY_HOME="D:\opensource\incubator-groovy\target\install"
改为你的目录即可
然后测试下
cd target\install\bin
groovy -v
groovy compiler version 1.0-alpha-1
Copyright 2003 The Codehaus. http://groovy.codehaus.org/
久违的第一版groovy出来了。激动。
3.5 写一个groovy文件
package abc;
class Abc {
property x;
void a() {
x = 1;
}
}
然后执行
groovy Abc.groovy
可以看到生成了class文件
用反编译工具打开class看一下,可看到这个类被groovy动了手脚
生成的Abc类变成了这个样子:
package abc;
public class Abc
{
private Object x;
public Object getX()
{
return this.x;
}
public void setX(Object paramObject)
{
this.x = paramObject;
}
public void a()
{
this.x = new Integer(1);
}
}
3.6 源码阅读
然后可以读读源码,体会一下。入口点是org.codehaus.groovy.tools.Compiler这个类。
大致原理就是:
groovy负责词法、语法解析groovy文件,然后用asm生成普通的java字节码文件,供jvm使用。
看代码的话建议由浅入深,各个击破。
比如先看这些类:StringCharStream,Lexer。这些类是做词法分析的,也就是第一步。
看不懂可以跑跑类对应的junit测试,在eclipse里debug一下。
这里看了可以发现最早的groovy,Lexer里面都是自己手写的,而现在新版的groovy估计是用的antlr,自动生成这些词法分析代码,没有人会去手写这些苦力代码了。
分享到:
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统