作者:江南白衣
1.Groovy的最新八卦之处
1.1 Wiki: http://docs.codehaus.org/pages/listpages.action?key=GROOVY
1.2 Mail list的在线浏览和rss定阅
Developer List http://dir.gmane.org/gmane.comp.lang.groovy.devel
User List: http://dir.gmane.org/gmane.comp.lang.groovy.user
2.Groovy的开发现状和未来
编译期健壮性大大增强的1.0 JSR-2,全力除Bug的1.0 JSR-3,JSR-4已经发布。
第二次全球Groovy 开发人员FB大会也在巴黎开完,有决议若干。
理论上 1.0正式版很快就要发布。
而计划中的1.1版本将支持 ruby的maxin、continuations 和JDK1.5的Annotatin。
3.Groovy and Java的暧昧关系
作为Java的私生子,Groovy的最终可执行状态是Java class bytecode,所以Java代码里可以把它当普通Java Bean一样调用。还有,Groovy的基础类库,都是用Java代码来写的。
3.1 编译Java class bytecode
就像JSP的最终面目是servlet class,GroovyC也会把groovy文件编译成Java class bytecode以在JVM上运行。
其中Groovy Class会编译成GroovyObject的子类,Groovy Script代码段会编译成Script的子类。
可以用GroovyC来静态编译,也可以在Java程序里用GroovyShell动态parse Groovy文件。
3.2 在Java代码中调用Groovy
1.Groovy类:
GroovyObject类默认有get/setProperty()和invokeMethod()的反射接口,在Java代码里,可以直接调用Groovy类的方法,也可以通过反射接口来调用。
2.Script代码段:
Script类有Script(Binding)构造函数和run()接口,在java里先通过Script(Binding)构造一个Script类,绑定变量,然后通过run接口进行调用。
3.3 在Java中直接使用Groovy的类库
Groovy和Groovy的框架类库都是用Java写出来的的。所以有些类库如SimpleTemplateEngine,也可以在Java里直接使用,不用绕Groovy一圈。
4.groovyJ插件
groovyJ是IDEA插件,有语法变色和Run()功能,更有用的功能是编译Java文件目录时,会把其中的groovy文件也一同编译。而日后将支持重构、类间跳转等功能,值得期待。
而Eclipse插件只有Run()和语法变色,而且随着Eclipse的升级时灵时不灵,正在花时间实用化中。
NetBeans开了个Coyote的项目来支持脚本语言。
5.一些重要的开发人员
一个PM:
Guillaume Laforge
两个Founder:
Bob Mcwhirter (同时是Drools,Dom4J的founder) ,
James Strachan (Core Developers Network,同时work on Geronimo,Drools,ServiceMix 和很多Jarkarta 项目,似乎拥有无穷的精力)
三个来自ThoughtWorks的开发人员:
Jame Walnes,Chris Stevenson,Matt Foemmel
四个star of JSR-2:
Jeremy Rayner, Jochen Theodorou,和两位老大一起改进JSR-2编译的强壮性和出错信息显示
Franck Rasolo:IDEA插件GroovyJ的开发人员
Christian Stein :Groovlet,Template的开发人员
Steven Devijver : Grails--Groovy on Rails的主持,同时是Spring Modules的leader。
6.有哪些使用Groovy的项目
Grails(Groovy on rails,大老们非常期待的项目,把rails在MVC和ORM的优点抄到java下,而且是基于Spring Framework的)
Drools(规则引擎, 用户可以用groovy写规则)
eXo platform(porlet/Service container,本身核心是groovy,用户可以用groovy 来写Porlet)
XWiki (第2代的wiki引擎、Application引擎。用户可以用groovy写Plug-in,Marco和Application)
RIFE(一个MVC/Web framework,用户可以用groovy写action和配置layout,workflow。还含有一个CRUD框架,用户用groovy 定义domain class,滴嗒一下,就能获得一个CRUD模型)
7.Groovy-all-1.0-jsr3.jar
groovy需要asm和antlr包的支持,使用groovy-all-10-jsr3.jar,将预带这两个包的正确版本,非常省心。
8.Migrating to JSR
JSR版本语法的的最大改动有两处。网上很多Groovy文章都还是基于旧语法的,需要自己改正过来。
8.1 为了加强代码健壮性,Class里的变量需要用def 定义。而在script里的变量因为是动态binding的,仍然不需要def定义。
8.2 多行的String需要用 """ """而不是" "来括住。
9.SimpleTemplateEngine-总共200行就实现了JSP engine的功能
动态语言开发框架很方便,所以Ruby on Rails没有IDEA级的IDE都能这么就把MVC、ORM都实现了一遍。
请看src/groovy/text/SimpleTemplateEngine.java,总共219行。
原理就是把模版中的文本部分替换成println """ 文本""" ,Groovy部分照搬,生成一个新的Groovy script,然后拿GroovyShell执行一遍就完成了。
10.如何用Java实现动态语言
把GroovyC编译出来的class文件再用jad反编译,可以看到如何用Java去实现一门动态语言。
主要是多了一个MetaClass, 不断的反射反射,运行时还非常依赖Asm
最简单的例子:
Groovy文件:
public class Customer
{
private String id;
}
编译出来的Java文件
public class Customer implements GroovyObject
{
private String id;
transient MetaClass metaClass;
public Customer()
{
Object obj = ScriptBytecodeAdapter.invokeStaticMethod ("org.codehaus.groovy.runtime.ScriptBytecodeAdapter", "getMetaClass", this);
Metaclass metaclass = (MetaClass)ScriptBytecodeAdapter.asType(obj, groovy.lang.MetaClass.class);
}
public Object invokeMethod(String s, Object obj) {}
public Object getProperty(String s) {.}
11.ant 的编译脚本
<path id="groovy.classpath">
<pathelement path="${basedir}/ROOT/WEB-INF/classes/"/>
<fileset dir="${basedir}/ROOT/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
</path>
<taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc">
<classpath refid="groovy.classpath"/>
</taskdef>
<target name="groovy">
<groovyc destdir="${project.basedir}/ROOT/WEB-INF/classes"
srcdir="${project.basedir}/src" listfiles="true">
<classpath refid="groovy.classpath"/>
</groovyc>
</target>
分享到:
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
对Groovy开发环境设置,基本语法做了简单明了的介绍
Groovy_笔记
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
Groovy语法&Gradle配置学习笔记
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
图文并茂,适合入门新手,涵盖了基本的语法讲解及一些DEMO测试,值得一看
本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为任何商业目的,只为更好的传播 groovy dsl 技术知识。...
NULL 博文链接:https://xiajs.iteye.com/blog/1871551
本笔记详细记载从本人入门学习到案例操作的所有详细过程,中有截图,与源码对照,不管是初学者还是对其需要研究的人都能是一本难得的资料,欢迎下载,下期我将提供最新的项目实战NOTE,并会时时更新.....
NULL 博文链接:https://yinxvxv.iteye.com/blog/811328
在项目的根目录下创建一个sonar-project.properties文件从项目根目录运行sonar-scanner命令单击分析结尾处提供的链接,以在SonarQube UI中浏览项目的质量笔记CodeNarc :可以通过设置sonar.groovy.codenarc.repor
这是groovy的学习笔记和入门级别的文档教程 共享下载 希望对学习grails 和 groovy的人有帮助
如果您看了在下的笔记,觉得不错,可以再看一下Gradle的笔记。 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的...
入门笔记 基于《Learning Groovy》 Authors: Davis, Adam L. github文档地址 https://richardgong1987.github.io/groovy-learning 本人网名:止水 email: skype: ae3586 如果你觉得有用,也可以支付宝打赏小弟,...
在将ADT与AndroidStudio进行对比鼓励开发者们积极拥抱,并列举了AndroidStudio与Gradle下一些深入实用的功能,分享自己以及在帮助用户集成过程中遇到的坑之后,作者追本溯源,对Groovy与Gradle进行了讲解,帮助...
笔记 个人软件开发说明