`
liugang594
  • 浏览: 987519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JET自动生成代码

阅读更多

EclipseEMF里提供了一个根据模板生成代码的机制:JETEMF就是使用JET来生成代码的。JET可以根据定制的生成模板生成最终的文本(代码)。这一节大致讲一下怎么使用JET来生成代码。 

一、原理

JET的原理很简单:通过一个定义的模板,生成一个中间类,这个中间类有一个generate()方法,用来生成最终的一串字符串(也就是你想生成的代码)。generate()方法里就是使用一个StringBuffer对象,根据模板的内容来构造出一个字符串,最后返回在。 

所以我们生要明白,总共有两个东西在起作用:模板和中间类。

其实还有一个,就是用来生成中间类和执行类的后台引擎。不过从用户的角度来看,通常只能知道模板的存在。 

二、模板格式

首先介绍一下模板的格式。 

要把一个文件作为JET的模板文件,则它的文件名的后缀需要以"jet"结尾,例如:test.javajethelloWorld.xmljet等。这里后缀的前半段可以随意,不过通常用来表示生成的内容格式,例如你要生成的是java代码,则通常是*.javajet;如果想生成xml文件内容,则格式通常是*.xmljet 

要使用jet,首先我们就得先准备一个这样的模板。

上面讲了模板文件名字的约束,下面来讲一下模板文件的内容格式。 

1       文件头   

Jet文件头需要如下声明:

<%@ jet package="包名"
        imports="导入列表、以空格分开"
        class="类名"
%>

其中必须以<%@ jet开头,以%>结尾。在节一中,我们提到了中间类的概念。这里的packageimportsclass都是针对中间类来说的,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) 

这样,idpluginID的插件就会被作为依赖项加入。当然,可以加入一个或多个。

 

 

分享到:
评论
3 楼 262726909 2010-02-01  
请问楼主知不知道JET模板文件里怎么支持中文?
2 楼 liugang594 2008-01-08  
啊,I am sorry。不已经很久没有再看JET了。记得后来有一次看了一个别人的写的,好像跟这个已经很不一样了。不过没有很细的留意。有空我再看看
1 楼 lszwycn 2008-01-08  
这个是jet1版本的,有没有对jet2有所研究呢

相关推荐

    Jet标签自动生成代码

    标题中的“Jet标签自动生成代码”指的是在软件开发过程中,使用Eclipse插件JET(Java Emitter Templates)来自动化生成代码的过程。JET是一种模板引擎,它允许开发者通过定义模板来生成源代码,以此提高开发效率并...

    Eclipse_EMF_JET_自动代码生成技术入门

    Eclipse_EMF_JET_自动代码生成技术入门

    Eclipse 项目有一个称为 JET 的技术项目就是一个专门的代码生成器

    在Eclipse的生态系统中,JET(Java Template Engine)是一个重要的技术组件,它是一个专门的代码生成器,能够帮助开发者自动生成和定制代码,从而提高开发效率和代码质量。JET通过模板语言和元数据来实现代码的自动...

    自动生成DAO源代码

    Eclipse的JET模板是一个强大的工具,它允许开发者根据预定义的模板自动生成代码。在本例中,我们可以创建一个JET模板来生成符合特定规范的DAO类,例如,模板可以包含接口定义、实现类以及相关的方法。JET模板使用一...

    Jet的脚手架工具帮助您更便捷地使用Jet

    在编程领域,它指的是自动生成项目框架的工具,这些框架通常包含了一套基本的文件和目录结构,以及必要的配置文件。通过命令行接口(CLI),开发者可以快速生成符合特定需求的项目起点,例如一个包含前端路由、模块...

    JET之HelloWorld

    根据提供的部分代码示例,我们可以进一步了解如何使用JET生成代码: 1. **创建模板文件**:`helloworld.txtjet` ```java package hello; public class HelloWorldTemplate { public String getGreeting() { ...

    ASP自动生成HTML页

    在本场景中,"ASP自动生成HTML页"是指利用ASP技术,当用户执行某些操作,比如保存数据时,系统会自动创建或更新HTML页面。这种功能常用于构建动态网站,使网站内容能够实时更新,提高用户体验。 首先,我们要理解...

    C#代码生成器(生成操作ACCESS数据库的数据层代码)

    用户可能需要运行这个程序,输入ACCESS数据库文件的路径,然后选择生成代码的目标位置,就能自动生成操作ACCESS数据库的数据层代码。 总结来说,C#代码生成器是开发过程中的一种利器,特别是在处理数据库操作时。它...

    eclipse.jet resource

    Jet引擎允许开发者使用Java语法和模板语言来编写可重用的代码片段,这些代码可以嵌入到HTML、XML或其他类型的文档中,以实现动态页面生成。它在Eclipse IDE中被广泛使用,为开发人员提供了一种强大的、灵活的方式来...

    Access数据库mdb生成代码(JAVA源代码)

    在Java项目中,编译源代码后,生成的字节码文件会自动放入bin目录下,以便于运行。 通过这个示例,开发者可以学习如何在Java中使用Jackcess库与其他依赖库来读写Access数据库,实现数据库操作。这涵盖了文件I/O、...

    jet:具有代码生成和自动查询结果数据映射的类型安全SQL Builder

    动机内容产品特点自动生成的类型安全SQL Builder PostgreSQL: (DISTINCT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, FOR, UNION, INTERSECT, EXCEPT, WINDOW, sub-queries) (VALUES, MODEL, MODELS...

    Microsoft Jet SQL 参考

    - 自动编号(AutoNumber):用于生成唯一的整数标识符。 4. **索引与查询性能:** - PRIMARY KEY和UNIQUE约束:确保数据唯一性并优化查询速度。 - 索引(Index):创建索引以加速数据检索,尤其是对于经常进行...

    Eclipse Enum插件示例

    4. **使用Jet模板语言**:Jet是一种强大的模板语言,它允许开发者根据特定的输入生成代码。在Eclipse Enum插件中,Jet被用来根据用户输入的枚举信息自动生成对应的Java枚举类。Jet模板定义了代码结构,而实际的数据...

    asp如何自动生成html文件.pdf

    在本文档中,我们探讨的是如何使用ASP来自动生成HTML文件,这是一个常见的需求,特别是对于那些需要频繁更新或定制网站页面内容的开发者而言。 首先,我们需要创建一个数据库来存储模板。在本例中,数据库名为`...

    pb编写的execel自动生成sql语句

    标题中的“pb编写的excel自动生成sql语句”指的是使用PowerBuilder(PB)这款软件开发工具,结合Excel电子表格,创建了一个程序或脚本,能够根据用户在Excel中输入的数据自动生成相应的SQL(结构化查询语言)语句。...

    MyCode代码生成器1.0绿色免费版.zip

    MyCode-代码生成器 1.0是一款很实用的小工具,可以自动生成BCB版的数据库操作代码(ADO)。从面避免繁琐的手工编写,使用很简单,你只需简单调用就可以对数据库进行操作。支持windows身份验证以及SQL Server身份验证...

    VB数据库自动编号

    以下是一个简单的VB代码片段,展示了如何使用ADO创建带有自动编号字段的新记录: ```vb Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data...

Global site tag (gtag.js) - Google Analytics