快速业务通道

使用EMP进行建模,第2部分:使用Eclipse的Java Emitter Templates生成代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
ude file="copyright.inc" %> 语句。所指定的包 含文件会被添加到编译后的输出结果中,因此它可以引用到现在为止已经声明的任何变量 。扩展名 .inc 可以任意,只是不要采用以 jet 或 JET 结尾的名字,否则将试图编译包 含文件,这样该文件的理解性自然很差。

定制 JET 编译

如果只使用包含文件还不能满足要求,您可能会想添加其他一些方法,或者对代码生 成过程进行定制;最简单的方法是创建一个新的 JET 骨架。骨架文件就是描述编译后的 JET 模板样子的一个模板。缺省的骨架如清单 5 所示。

清单 5. 缺省的 JET 骨架

public class CLASS {    public String generate(Object argument)    {      return "";    } } 

所有的 import 语句都位于最开始, CLASS 会被替换为在 jet 声明的 class 属性中 设置的类名, generate() 方法的代码会被替换为执行生成操作的代码。因此,要修改编 译后的模板代码的样子,我们只需要创建一个新的骨架文件并进行自己想要的定制即可, 但是仍然要在原来的地方保留基本的元素。

要创建一个定制的骨架,在 custom.skeleton 模板目录中创建一个新文件,如清单 6 所示。

清单 6. 定制 JET 骨架

public class CLASS {    private java.util.Date getDate() {      return new java.util.Date();    }    public String generate(Object argument) {      return "";    } }

然后在想要使用这个定制骨架的任何 JET 模板中,向 javajet 文件中的 jet 声明添 加 skeleton="custom.skeleton" 属性。

或者,也可以使用它对基类进行扩充,例如 public class CLASS extends MyGenerator ,并在基类中添加所有必要的帮助器方法。这样可能会更加整洁,因为它保 留了代码的通用性,并可以简化开发过程,因为 JET 编译器并不能总是给出最正确的错 误消息。

定制骨架也可以用来修改方法名和 generate() 方法的参数列表,这样非常挑剔的开 发人员就可以任意定制模板。说 JET 要将 generate() 的代码替换为要生成的代码,其 实有些不太准确。实际上,它只会替换在骨架中声明的最后一个方法的代码,因此如果粗 心地修改骨架的代码,就很容易出错,而且会让您的同事迷惑不解。

使用EMP进行建模,第2部分:使用Eclipse的Java Emitter Templates生成代码(3)

时间:2011-03-26 IBM Adrian Powell

使用 CodeGen

正如您可以看到的一样,模板一旦编译好之后,就是一个标准的 Java 类。要在程序 中使用这个类,只需要分发编译后的模板类,而不需要分发 javajet 模板。或者,您可 能希望让用户可以修改模板,并在启动时自动重新编译模板。EMF 可以实现这种功能,任 何需要这种功能或对此感兴趣的人都可以进入 plugins/org.eclipse.emf.codegen.ecore/templates 中,并修改 EMF 生成模型或编辑 器的方式。

如果您只是希望可以只分发编译后的模板类,那么编译过程可以实现自动化。迄今为 止,我们只看到了如何使用 JET Eclipse 插件来编译 JET 模板,但实际上我们可以编写 一些脚本来实现这种功能,或者将生成代码的工作作为一项 ANT 任务。

运行时编译模板

要让最终用户可以定制模板(以及对模板的调试),可以选择在运行时对模板进行编 译。实现这种功能有几种方法,首先我们使用一个非常有用的类 org.eclipse.emf.codegen.jet.JETEmitter ,它可以对细节进行抽象。常见的(但通常 是错误的)代码非常简单,如清单 7 所示。

清单 7. JETEmitter 的简单用法(通常是错误的)

String uri =  "platform:/templates/MyClass.javajet"; JETEmitter jetEmitter = new JETEmitter( uri ); String gen

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号