`
xpenxpen
  • 浏览: 725137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy实现原理简单研究(1)

阅读更多
本文简单研究一下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,自动生成这些词法分析代码,没有人会去手写这些苦力代码了。

0
0
分享到:
评论

相关推荐

    groovy-src-2.3.6.zip 最新稳定版源码

    深入研究Groovy 2.3.6的源码,不仅可以帮助我们理解语言的内部工作原理,还可以为开发人员提供灵感,如何在自己的项目中应用这些设计理念和技巧。无论是为了学习、调试还是扩展Groovy,源码都是一个宝贵的资源。

    rxjava-groovy-0.7.0.zip

    通过研究这个项目,我们可以深入理解RxJava在Groovy环境下的工作原理,学习如何优雅地处理异步流程,以及如何利用Groovy的特性来优化代码。这对于提升我们的并发编程能力和理解反应式编程模型都大有裨益。对于想要在...

    groovy+spring在web中的应用

    通过研究这些示例,读者可以更好地理解Groovy在Spring环境中的工作原理和最佳实践。 总的来说,Groovy与Spring的结合为Web开发提供了一种新的可能性,它使得开发过程更加高效、灵活,并且富有表现力。无论是从配置...

    groovy-src-1.7.0

    通过查看源代码,开发者可以深入理解Groovy语言的实现细节,包括其解释器、编译器、类加载器以及其他关键组件的工作原理。 Groovy 1.7.0版本引入了一些关键特性,例如: 1. 改进了类型推断:这使得在不声明类型的...

    XStream Deserializable Vulnerablity And Groovy CVE-2015-3253漏洞分析

    本文将深入探讨XStream组件的反序列化漏洞,并结合Groovy的CVE-2015-3253漏洞进行分析,以揭示其中的原理和影响。 XStream是一款流行的Java库,用于XML和对象之间的序列化和反序列化。近期,XStream反序列化漏洞...

    基于Grails的办公自动化系统的研究与实现.rar

    本研究聚焦于采用Groovy on Grails(简称Grails)框架开发的办公自动化系统,探讨其设计原理、实施方法以及在实际应用中的优势。 Grails是一个开源的Web应用程序框架,基于Groovy语言,它充分利用了Java平台的灵活...

    Drools5规则引擎学习研究

    例如,给出的代码段展示了两个简单的规则:"rule1"和"rule2"。这些规则会在满足条件(当有一个`Customer`对象时)时触发,设置订单数量并打印出订单的数量。这种声明式的编程方式让业务逻辑更加清晰。 学习Drools...

    grails app

    1. **Grails框架介绍** Grails是基于MVC(Model-View-Controller)架构的,它简化了开发流程,通过元编程和约定优于配置(Convention over Configuration)的理念,使得开发者能够更专注于业务逻辑,而不是基础设施...

    使用SlidingMenu方法实现侧滑栏菜单_android源码下载.zip

    现在也有一些替代方案,如Android Design Support Library中的`NavigationView`或使用现代框架如Jetpack Compose的`Scaffold`组件,但SlidingMenu仍然适用于学习和理解侧滑栏菜单的基本实现原理。

    Android教你如何一分钟实现下拉刷新功能项目完整实例代码

    以上就是一个简单的下拉刷新功能的实现步骤。在实际应用中,你可能需要考虑更多细节,比如在网络错误时的处理、离线模式下的显示,以及优化用户体验等。 在提供的"PullToRefreshTest"项目中,你应该能够找到完整的...

    grails-1.3.0.RC2

    在研究 `grails-1.3.0.RC2` 源代码时,开发者可以深入了解Grails框架的架构,学习如何实现MVC模式,以及如何利用Groovy语言的特性来优化Web应用的开发。此外,还可以探索框架的内部工作原理,比如GORM是如何处理...

    Spring 3.0 就这么简单(源码)

    这个"Spring 3.0 就这么简单(源码)"压缩包文件包含了Spring 3.0的核心源码,为深入理解Spring的工作原理和学习其设计思想提供了宝贵的资源。 Spring 框架是一个全面的企业应用框架,它的核心特性包括依赖注入...

    智慧事物

    1. **设备控制脚本**:Groovy的简洁语法使得编写控制设备的脚本变得简单,例如,可以通过Groovy脚本控制智能灯泡的开关、颜色和亮度。 2. **API集成**:许多物联网设备提供了RESTful API,Groovy可以方便地调用这些...

    killbill-overdue-0.1.44.zip

    1. **反应式编程**:Ratpack 支持反应式编程模型,允许应用程序以非阻塞方式处理请求,提高了系统的并发能力。 2. **Groovy 语言**:Ratpack 用 Groovy 语言编写,Groovy 是一种简洁、动态的 JVM 语言,具有丰富的...

    JVFloatingDrawer Demo

    本文将深入探讨JVFloatingDrawer的核心概念、使用方法以及其实现原理。 首先,抽屉效果在Android应用中通常通过`android.support.v4.widget.DrawerLayout`来实现,它是Android Support Library的一部分。然而,...

    MQTT客户端示例

    通过研究这个示例,开发者可以快速上手在Android应用中集成MQTT协议,实现物联网设备的数据交互。 总结来说,MQTT是物联网领域常用的通信协议,尤其适用于资源有限的设备。在Android平台上,借助Paho MQTT库,我们...

    超简单实现图片裁切功能

    通过研究Android-CropView-master源代码,开发者可以更深入地理解图片裁剪的实现原理,为自己的项目定制更多功能,比如添加更多裁剪形状、滤镜效果等。 总之,Android-CropView是一个强大的图像裁剪工具,它简化了...

    java源码:Java开发的SHELL CRaSH.gz

    3. **脚本支持**:除了基本的命令执行,CRaSH还支持通过JavaScript或Groovy编写脚本,增强了交互性,使得自动化任务变得简单。 4. **集成Spring框架**:CRaSH通常与Spring框架紧密集成,可以轻松地注入到Spring管理...

    DSLs实战-DSLs in Action

    ### DSLs实战——深入探索领域特定语言 #### 引言 《DSLs实战》是一本由Debasish Ghosh撰写...通过系统地学习书中提供的理论知识和实践案例,读者将能够更好地理解DSL的原理,并掌握设计和实现各种类型的DSL的技术。

    javaSE代码实例

    第1章 初识Java 3 1.1 Java简介 3 1.1.1 Java的不同平台 3 1.1.2 Java发展的历程 3 1.1.3 Java的特点 4 1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 1.2.3 安装后Java目录的解读 7 1.3...

Global site tag (gtag.js) - Google Analytics