Eclipse_EMF_JET_自动代码生成技术入门

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
很有意思吧,先不管自己想的是不是对的,先编译下,点击 Project,然后选择"Bu ild All"或者 先选中项目在选择"Bu ild Project"你就会看见 SRC 变样子了,展开看看吧,正如自己所想的, 在 src 下创建了个 hello 的包,然后在 hello 包下创建了个名为 HelloWorldTemplate 的 java 文
public static void main(String[] args) { List<String> data = new ArrayList<String>(); data.add( "first"); data.add( "second" ); data.add( "third"); XMLDemoTemplate generateXml = new XMLDemoTemplate(); String result = generateXml.generate(data); System. out.println(result);
在本文中,您将学习如何创建JET模板,如何使用Jet和JET生成器模板自动翻译 成Java类,以及如何使用这些类生成源代码。本文还提供了一个简短的JET语法 参考。
开始: 现在来创建第一个模板,需要安装 EMF 插件,如果你还没有安装,那么先安装在继续本教 程,下载地址 /emf
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTem plate" %> <% List<?> elementList = (List<?>) argument; %> <?xml version="1.0" encoding="UTF-8"?> <demo> <% for (Iterator<?> i = elementList.iterator(); i.hasNext(); ) { %>
将模板编译到 src 源代码目录下 在"templates"目录下创建一个名为"helloworld.txtjet"的文件
第一步:创建工程 创建一个名叫 jetDemo 的 Java Project
第二步:将 jetDemo 修改成 JET Project 点击工具栏上的 File -> Other
<element><%=i.next().toString()%></element > <% } %>
</demo>
然后 Build Project ,你会发现在 hello 包下多了个 XMLDemoTemplate
它的内容如下: package hello;
import java.util.*;
<%@ jet package="hello" imports="java.util.*" class="ImportDemoTemplate" %>
在 JET 语法参考一节提供了有关飞机的指令及其属性的更多细节。
在接下来的例子中,我们将创建一个模板,生成的 XML 代码。要坚持以 EMF 常规:任何 生成代码的文件扩展名是"jet"我们将这个模板保存到一个文件"importdemo.xmljet".请 注 意 , 我们通过模板的 java.util.List 对象来生成 XML。 在 importdemo.xmljet 文件中写下如下内容:
在 Properties 对话框中,选中 JET Setting,在右边 page 中的 Source Contiane r 中填上 src 就是 之前创建的那个项目的源代码目录,然后点击 Finish
第四步:创建一个 JET Template 文件 JET 的编译过程就是将所有的 template 文件编译到 Java 项目中的 src 源代码目录,所以我们要 先取消自动编译,手动去编译 JET,点击 Project 菜单,取消选中"Bu ild Automatically".

现在让我们来试试实现 JET 所生成的方法带来什么效果吧,选中 hello 包点击右键 New > Class
在创建 Class 对话框中的 Names 写上 HelloWorldImpl,并且生成 main 方法:
然后在 main 方法中写下如下代码:
HelloWorldTemplate helloworld = new HelloWorldTemplate(); String result = helloworld.generate(null); System.out.println(result);
create(String
public
final
String
NL
= nl
==
null ?
(System. getPro perties ().getProperty( "line.separator" )) : nl;
protected final String TEXT_1 = "<?xml version=\"1.0\"
JET 入门学习
By WIN
/ 摘要:
自动生成源代码可以为我们节约时间,缩短开发周期,也为公司节约资金,虽然生成源 代码很强大,但是往程序中插入代码就会变得很复杂,很难理解。有一种方法可以减少复杂 性和增加可读性那就是使用模板。 在 Eclipse 建模框架(EMF)项目中,包含两个非常强大的用于生成源代码的工具: JET(Java Emitter Templates) 和 JMerge(Java Merge)。JET 可以使用类似 JSP 的语法(实际上是一个子 集 JSP 语法),这使它很容易编写要生成的代码。 JET 是一个通用的模板引擎,它可用于生 成 SQL、XML 的 Java 源代码和其他输出模板。它位于 org.eclipse.emf.codegen 插件.
public class XMLDemoTemplate {
protected static String nl; public static synchroni zed XMLDemoTemplate lineSeparator) {
nl = lineSeparator; XMLDemoTemplate result = new XMLDemoTemplate(); nl = null; return result; }
然后再来来看看这样做了之后的效果吧,将 HelloWorldImpl 中 main 方法的内容换成如下代 码:
GreetingTemplate sayHello = new GreetingTemplate(); String result = sayHello.generate(" Ming.He"); System.out.println(result);
JET 的种类和 JET 编译
接下来让我们创建第一个传统的"Hello,World"消息,模块使用以下四个步骤:
1. 2. 文件夹 3. 4.
创建一个 Java Project,并给它一个 src 源代码文件夹 添加一个 JET 性质的 Project,将会在工程根目录下创建一个名为"templates"
然后新建个测试类:XMLDemoimpl ,内容如下:
package hello;
import java.util.ArrayList; import java.util.List;
/** * 通过java.util.List 来生成XML * * @author Ming.He * */ public class XMLDemoImpl {
public String generate(Object argument) {
final StringBuffer stringBuffer = new StringBuffer(); List<?> elementList = (List<?>) argument; stringBuffer.append( TEXT_1); for (Iterator<?> i = elementList.iterator(); i.hasNext(); ) { stringBuffer.append( TEXT_2); stringBuffer.append(i.next().toString()); stringBuffer.append( TEXT_3); } stringBuffer.append( TEXT_4); return stringBuffer.toString(); } }
大家会发现控制台打印出“Hello, Ming.He !”
导入包 一提到导入,大家肯定就想起了 import ,不错,确实是和 import 有关,往下看吧:
传给模板的参数可以是任何对象。在前面的例子中,我们通过一个字符串作为参数的产生方
法,但在应用程序中你可能想通过在自己的模型对象。 如果参数不是在 ng 包 , 或如果您的模板使用在 ng 没有任何其他类包,则需要在 JET 模板中导入 这些类包。一个 JET 指令属性如下:
这个时候就会出错了 The 'jet' directive is missing in 'helloworld.txtjet' at line 1 column 1 点击 Problem Occurred 里的 Details 就可以看到详细信息了
其实这不是一个真正的错误,那么这个错误是怎么产生的呢?就是 JET 在编译的时候发现咱 们的文件里面啥都没有,点击 OK 关闭 Problems 对话框,打开 helloworld.txtjet 在里面写上如下一段代码:
encoding =\"UTF-8\"?>" + NL + "<demo>" ;
protected final String TEXT_2 = NL + "<element>" ;
protected final String TEXT_3 = "</eleml String TEXT_4 = NL + "</demo>";
屏幕截图是基于 3.5 的 Eclipse SDK 和 2.4 的 EMF 插件,最低要求使用 Java5.0 的环境,如泛 型,我这里用的是 6.0 的 Java 环境
一个 JET 模板是一个文本文件,后缀名以"jet"结尾,我将遵循 JET 的约定给 txt 加上"jet"后缀 , 所以。Javajet 意味着模板生成.java 文件.xmljet 生成 XML 模板,模板生成 SQL 有。sqljet 扩展,等等。
得到下面的对话框:
如图展开 Java Emitter Templates 选中 Convert Projects to JET Projects 点击 Next
选中刚才创建的 Java 项目点击 Finish,这样就完成了,并且在该项目下新建了个 templates 的 包 第三部:更改 JET 的设置 选中项目,右键菜单点击 Properties
在代码编辑器中右键”Run As/Application”运行它看看效果,在控制台中你会看到“Hello, world!”
试一试:添加一个新的 JET 模板或更改现有以下内容: 将 helloworld.txjet 中的内容更改成如下内容:
<%@ jet package="hello" class="GreetingTemplate" %> Hello, <%=argument%>! 然后再Build Project,大家会发现编译的时候在 hello 包下多了个GreetingTemplate .java 文件 , 那么这样就可以说明 package 是所在的包,class 就是生成的类
现在我们来创建第一个 template 文件,点击 File > New > File 打开创建文件的对话框
选中自己项目下的 templates 目录然后给文件命名为 helloworld.txtjet 然后点击 Finish 接下来,我们来编译一下吧,点击 Project,选择"Bu ild All"
相关文档
最新文档