在Eclipse的EMF里提供了一个根据模板生成代码的机制:JET。EMF就是使用JET来生成代码的。JET可以根据定制的生成模板生成最终的文本(代码)。这一节大致讲一下怎么使用JET来生成代码。
一、原理
JET的原理很简单:通过一个定义的模板,生成一个中间类,这个中间类有一个generate()方法,用来生成最终的一串字符串(也就是你想生成的代码)。generate()方法里就是使用一个StringBuffer对象,根据模板的内容来构造出一个字符串,最后返回在。
所以我们生要明白,总共有两个东西在起作用:模板和中间类。
其实还有一个,就是用来生成中间类和执行类的后台引擎。不过从用户的角度来看,通常只能知道模板的存在。
二、模板格式
首先介绍一下模板的格式。
要把一个文件作为JET的模板文件,则它的文件名的后缀需要以"jet"结尾,例如:test.javajet、helloWorld.xmljet等。这里后缀的前半段可以随意,不过通常用来表示生成的内容格式,例如你要生成的是java代码,则通常是*.javajet;如果想生成xml文件内容,则格式通常是*.xmljet。
要使用jet,首先我们就得先准备一个这样的模板。
上面讲了模板文件名字的约束,下面来讲一下模板文件的内容格式。
1、 文件头 Jet文件头需要如下声明:
<%@ jet package="包名"
imports="导入列表、以空格分开"
class="类名"
%>
其中必须以“<%@ jet”开头,以“%>”结尾。在节一中,我们提到了中间类的概念。这里的package、imports、class都是针对中间类来说的,class即中间类的类名、package即中间类的包名、imports即中间类的导入。例如:
<%@ jet package="com.tibco.cdc.liugang.jet"
imports="java.util.*"
class="JETTest"
%>
生成的中间类定义如下:
package com.tibco.cdc.liugang.jet;
import java.util.*;
public class JETTest
{
……
}
2、 语法格式
从文件头以下,就是具体的模板内容了。具体模板定义成什么样,需要由你最终想要的效果决定,例如:
1、 生成HelloWorld
如果你想生成一个”helloWorld”字符串,那么你就直接在声明头下写:helloWorld。例如(以下用“JET文件头声明”代表文件头声明):
JET文件头声明
Hello world
则最终生成的结果为:Hello world
直接给出的文本,在中间类中被直接作为字符串追加到StringBuffer对象中去。例如这里的Hello world:
protected final String TEXT_1 = "Hello world";
……
stringBuffer.append(TEXT_1);
2、 参数支持
JET也支持传入参数,例如我们可以定义模板内容如下:
JET文件头声明
Hello world <%=argument%>
则当传入参数为“liugang”时,得到的结果为:Hello world liugang 我们看一下此时中间类的定义:
protected final String TEXT_1 = "Hello world";
……
stringBuffer.append(TEXT_1);
stringBuffer.append(argument);
我们看到参数也被直接追加到StringBuffer对象中去。这里<%=*%>是一个求值表达式,类似于JSP中的语法。使用求值表达式时,表达式被直接追加到stringBuffer对象中去。 在JET模板文件中,使用”argument”去得到参数。如果是一个复杂类型的参数,我们需要自己做强制转换或拆解。
3、 代码支持
也可以直接在JET中写一些“代码”。这里说代码是指这些“代码”片段在中间类中会被作为一段代码而加入。例如 :
JET文件头声明
<%if("liugang".equals(argument)){%>
hello liugang
<%}else{%>
hello others
<%}%>
如果我们传入的参数为”liugang”,则得到结果为:hello liugang;否则得到:hello others 在中间类中,这一段模板的代码表示为:protected final String TEXT_1 = "hello liugang";
protected final String TEXT_2 = NL + "hello others";
……
if("liugang".equals(argument)){
stringBuffer.append(TEXT_1);
}else{
stringBuffer.append(TEXT_2);
}
注意:有几个注意事项:
1、 需要注意空格的存在,例如“hello world”和” hello world”生成的结果不一样。
2、 构造代码时,需要注意代码定义的完整性,以及代码与非代码片段的区分。
二、JET引擎
一般来说,我们都是在程序中使用JET去生成代码,所以当然需要有通过调用程序的方式来生成。这就要用到JET引擎。 EMF中默认提供了JET的引擎类:JETEmitter
我们可以如下例如:
JETEmitter emitter = new JETEmitter(templateURI);
有了这个对象后,就可以直接调用它的方法来生成代码:
emitter.generate(monitor, arguments);
这里的arguments是一个数组对象,也就是最后会传到模板中的那个argument。最后方法的返回对象是一个String。
有时我们会传入一些只在当前插件中才存在对象,所以需要告知JET引擎这个对象类的所在,我们需要如下使用:
emitter.addVariable(variableName, pluginID);
这样,id为pluginID的插件就会被作为依赖项加入。当然,可以加入一个或多个。
分享到:
相关推荐
标题中的“Jet标签自动生成代码”指的是在软件开发过程中,使用Eclipse插件JET(Java Emitter Templates)来自动化生成代码的过程。JET是一种模板引擎,它允许开发者通过定义模板来生成源代码,以此提高开发效率并...
Eclipse_EMF_JET_自动代码生成技术入门
在Eclipse的生态系统中,JET(Java Template Engine)是一个重要的技术组件,它是一个专门的代码生成器,能够帮助开发者自动生成和定制代码,从而提高开发效率和代码质量。JET通过模板语言和元数据来实现代码的自动...
Eclipse的JET模板是一个强大的工具,它允许开发者根据预定义的模板自动生成代码。在本例中,我们可以创建一个JET模板来生成符合特定规范的DAO类,例如,模板可以包含接口定义、实现类以及相关的方法。JET模板使用一...
在编程领域,它指的是自动生成项目框架的工具,这些框架通常包含了一套基本的文件和目录结构,以及必要的配置文件。通过命令行接口(CLI),开发者可以快速生成符合特定需求的项目起点,例如一个包含前端路由、模块...
根据提供的部分代码示例,我们可以进一步了解如何使用JET生成代码: 1. **创建模板文件**:`helloworld.txtjet` ```java package hello; public class HelloWorldTemplate { public String getGreeting() { ...
在本场景中,"ASP自动生成HTML页"是指利用ASP技术,当用户执行某些操作,比如保存数据时,系统会自动创建或更新HTML页面。这种功能常用于构建动态网站,使网站内容能够实时更新,提高用户体验。 首先,我们要理解...
用户可能需要运行这个程序,输入ACCESS数据库文件的路径,然后选择生成代码的目标位置,就能自动生成操作ACCESS数据库的数据层代码。 总结来说,C#代码生成器是开发过程中的一种利器,特别是在处理数据库操作时。它...
Jet引擎允许开发者使用Java语法和模板语言来编写可重用的代码片段,这些代码可以嵌入到HTML、XML或其他类型的文档中,以实现动态页面生成。它在Eclipse IDE中被广泛使用,为开发人员提供了一种强大的、灵活的方式来...
在Java项目中,编译源代码后,生成的字节码文件会自动放入bin目录下,以便于运行。 通过这个示例,开发者可以学习如何在Java中使用Jackcess库与其他依赖库来读写Access数据库,实现数据库操作。这涵盖了文件I/O、...
动机内容产品特点自动生成的类型安全SQL Builder PostgreSQL: (DISTINCT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, FOR, UNION, INTERSECT, EXCEPT, WINDOW, sub-queries) (VALUES, MODEL, MODELS...
- 自动编号(AutoNumber):用于生成唯一的整数标识符。 4. **索引与查询性能:** - PRIMARY KEY和UNIQUE约束:确保数据唯一性并优化查询速度。 - 索引(Index):创建索引以加速数据检索,尤其是对于经常进行...
4. **使用Jet模板语言**:Jet是一种强大的模板语言,它允许开发者根据特定的输入生成代码。在Eclipse Enum插件中,Jet被用来根据用户输入的枚举信息自动生成对应的Java枚举类。Jet模板定义了代码结构,而实际的数据...
在本文档中,我们探讨的是如何使用ASP来自动生成HTML文件,这是一个常见的需求,特别是对于那些需要频繁更新或定制网站页面内容的开发者而言。 首先,我们需要创建一个数据库来存储模板。在本例中,数据库名为`...
标题中的“pb编写的excel自动生成sql语句”指的是使用PowerBuilder(PB)这款软件开发工具,结合Excel电子表格,创建了一个程序或脚本,能够根据用户在Excel中输入的数据自动生成相应的SQL(结构化查询语言)语句。...
MyCode-代码生成器 1.0是一款很实用的小工具,可以自动生成BCB版的数据库操作代码(ADO)。从面避免繁琐的手工编写,使用很简单,你只需简单调用就可以对数据库进行操作。支持windows身份验证以及SQL Server身份验证...
以下是一个简单的VB代码片段,展示了如何使用ADO创建带有自动编号字段的新记录: ```vb Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data...