1. 下载 emf插件
2. 下载 jet插件
3. 查看 help content中是否有帮助,如果有多半安装成功了
4. 点击 new—》project—》选择 transformation project(将 显示所有的wizard 启动,否则看不到,太坑爹了)
快速构造代码包和类结构,类似于易点
模板和参数结合产生任意文本,比如生成sql,txt文件等
参数: 通常为xml文件(有xpath支持)
模板: 使用jet定义,有tag和text组成,类jsp
控制文件: main.jet(根据参数生成目录和文件)
Jet工程由一个 main.jet (主要完成转换),一个参数文件(为转换提供数据,为xml),多个模板文件(和参数结合生成不同的文件内容)
1. 创建 jet transformation project (保证显示所有wizard启动)
2. 在templates 中创建模板文件 *.jet
<c:iterate select="$class/property" var="prop" > private <c:get select="$prop/@type" /> <c:get select="$prop/@name" /> ; </c:iterate>
3. 创建参数文件 parameter.xml
<workspace> <package name="com.test"> <class name="User"> <property name="name" type="String" initial="Honda Accord" /> <property name="age" type="int" initial="140" /> <property name="status" type="boolean" initial="true" /> </class> <class name="Course"> <property name="name" type="String" initial="数据挖掘" /> <property name="time" type="int" initial="40" /> </class> </package> </workspace>
4. 在 main.jet 中根据参数创建
<c:if test="isVariableDefined('org.eclipse.jet.resource.project.name')"> <ws:file template="templates/dump.jet" path="{$org.eclipse.jet.resource.project.name}/dump.xml"/> <c:iterate select="/workspace/package" var="package" > <ws:folder path="{$org.eclipse.jet.resource.project.name}/gen_src/" > <java:package name="{$package/@name}" > <c:iterate select="$package/class" var="class" > <java:class name="{$class/@name}" encoding="utf-8" template="templates/data.jet"/> </c:iterate> </java:package> </ws:folder> </c:iterate> </c:if>
5. 配置 run configuration 完成运行
input 处指定参数文件
6. 查看生成的文件和路径
关于 JET 中的 XPath ,应记住以下几个要点:
l ws:file 完成模板和参数的合并
{$org.eclipse.jet.resource.project.name} 是一个动态 XPath表达式,用 org.eclipse.jet.resource.project.name 变量的值替换部分字符串。该变量是由 JET 引擎定义的
<ws:file template="templates/email.jet" path="{$org.eclipse.jet.resource.project.name}/{$currEmail/@to}.txt" />
l c:get 输出表达式的内容
Pre<c:get select="/app/@middle" />Post 输出 PreHelloPost
l c:iterate迭代标记
iterate 标签通常也用于控制模板的其实标记。
例如,如果要为模型中的每个人创建 Java™ 类,可使用如下代码:
<c:iterate select="/app/person" var="currPerson"> <ws:file template="templates/PersonClass.java.jet" path="{$org.eclipse.jet.resource.project.name}/{$currPerson/@name}.java"/> </c:iterate> |
l c:choose 和 c:when 选择标签
l c:set
该标签允许模板动态更改输入模型的属性。
l setVariable
该标签允许模板声明和使用一个全局变量,使用 XPath 的全部能力来在任何时候操纵该变量。
如 <c:setVariable select="0" var="i" />设置i的值为 0
l java
标签中 java:package java:class 需要和 ws:project 相配合
org.eclipse.jet.tagLibraries 用于扩展标记库
org.eclipse.jet.xpathFunctions 启动自定义的xpath表达式
org.eclipse.jet.transform 用于什么来启动模板
org.eclipse.jet.modellnspectors 间Java对象适配为 xpath 信息模型
org.eclipse.jet.modelLoaders
org.eclipse.jet.deployTransforms 将transform 打包成deploy package,可用于UI查看那些转换可用
编写xml格式的参数文件:包括 包,类,属性,函数等
编写不同类的模板文件
编写 main.jet文件,根据参数生成目录和文件,使用ws:folder和ws:file完成生成
运行程序
http://www.ibm.com/developerworks/library/os-ecl-jet/
一种 statically-typed 语言,并可以生成java源代码
1.减少不必要的语法
2.比 Groovy快,比scala简单,有很多java工具支持
3.基于java 加入了 modern language feature
4.可自动生成java 源代码
1. extension method ——enhance closed types with new functionality
2. lambda expression—— anonymous function literals
3. operator overloading——操作符重载
4. powerful switch expressions——type based switching with implicit casts
5. multiple dispatch——对多态的支持
6. template expressions——
7. local type inference——声明对象时基本不用写类型
8. 支持java泛型
前后是三个单引号
@Data 作用
关键字 val代表 field是final的
java bean 可通过属性名访问, a.getP()中a如果为空,这种错误可skip
提供 lambda表达式,如: [String foo, String bar | foo + bar]
自动转换:
List和Array之间的转换,如val List<String> list=array
支持java和jTend之间的互相调用
从 package和import 开始
{ } 是可选的
xtend声明的class默认是 top-level,所以是public
支持一个文件中声明多个类,每个类是单独文件
构造函数可以 new(参数)
方法通过 def或 override定义
属性通过 val(final)或者var(非静态)声明, 类型不需要指定,可以通过内容推测出,如val list={"a","b"}
不需要修改就可以扩展已有类型,如: “guang“.toFirstUpper():
1. 已有库的扩展
* ObjectExtensions
* IterableExtensions
* MapExtensions
* ListExtensions
* CollectionExtensions
* BooleanExtensions
* IntegerExtensions
* FunctionExtensions
2. 扩展 local expression
3. 扩展 filed
4. 扩展 import
<未完,感觉不是很有用,以后再说>
eclipse 的help content
支持代码合并功能,通过使用简便的代码和实现定义好的合并规则就可以将自动生成代码与人工手写代码有效的整合。
具体待查看
基于eclipse的开源建模框架,gmf使用domain meta model可以生成建模代码
gmf对emf和gef进一步封装,提供了模型驱动的系统生成框架和运行时架构,其中生成框架提供一系列工具,可以在图形环境定制自己的领域模型,并基于该模型一步步设计开发。可以自定义 建模元素,各种图符和工具面板, 十分丰富的扩展点。
是一个开源框架和代码生成工具,可帮助我们以模型驱动方式开发eclipse应用程序,它定义了ecore 元模型,可转换为java代码。
是图形编辑器框架,只要模型改变能通知到控制器即可,控制器称为editpart,是应用程序的核心部分,负责将模型的改变反映到视图,并将用户在视图上所做的操作应用到模型,在视图方面GEF使用Draw2D。
通常使用EMF创建后台模型,用GEF来做可视化编辑器和后台模型的同步。
和rational的rose,需求 等相结合,生成软件开发文档
Texten 使用 ant和velocity配合,生成任意的文件。
从功能上来说,应该比 jet强大,毕竟和ant 结合了