JETEmitter使用:
String templateURI = "platform:/resource" + fullPath; ClassLoader classloader = getClass().getClassLoader(); JETEmitter emitter = new JETEmitter(templateURI, classloader);
templateURI:任何类型是 uri 的可以接受的,只要协议处理程序是 uri 的可用的,这意味着,file:/ uris,ftp: / uris 和 http:/ uris 所有可用。Eclipse添加特殊协议处理程序的 平台: 基 / /,平台:/插件/,平台: 片段/ 和 平台:/资源/ 因此插件可以使用了像 platform:/resource/myproject/myfolder/mytemplate.jet 的 uri 来指定模板文件的 uris。 注意: Eclipse 3.0 推出了 bundleentry 以其特殊的协议的列表。 它应在对 Eclipse 插件和功能等元素的引用。
在插件的我们示例中我们将派我们的模板文件连同我们插件,模板文件将位于 Eclipse 插件 文件夹下的 myplugin/模板 文件夹。 然后可以使用下面的代码找到并从该文件夹中生成的模板:
String pluginId = "myplugin.id"; String base = Platform.getBundle(pluginId).getEntry("/").toString(); String uri = base + "templates/myTemplate.javajet"; JETEmitter emitter = new JETEmitter(uri); String generatedText = emitter.generate(new Object[] {parameter});
构造一个 JETEmitter 对象后,客户端调用generate方法生成文本,生成文本的方法执行以下步骤操作:
1.创建一个称为 .JETEmitters,在工作区中的项目
2.这一项目准备给 Java 自然和添加到其类路径的类路径变量
3.翻译一个模板执行 Java 源文件在 .JETEmitters 项目中的模板
4.生成要编译到一个 Java .class 文件模板执行源代码的项目
5.翻译的 Java 模板实现类调用 生成 方法并返回一个字符串作为生成的文本
.JETEmitters 是模板转换的过程中创建的项目的默认名称。 setProjectName 方法,可以更改此值。
JETEmitter 陷阱:
1.插件所需初始化,就是前面所说的,必须在插件环境下才能调用JETEmitter,JETEmitter不能作为Application独立运行。
2.类加载程序问题:
当您将自定义对象作为参数传递给 JETEmitter.generate 方法时,您可能会一 NoClassDefFoundError。 如果您将作为参数传递的对象不是一个 java"bootstrap"类 (引导类是运行时类在 rt.jar 和 i18n.jar 中的国际化类) 的这就可能发生。
为防止出现此错误时使用 JETEmitter 时必须指定类加载器的您的插件。 如果不指定了任何类加载器 JETEmitter 使用自己通常是在 org.eclipse.emf.codegen 插件的类加载器的类的类加载器,此类加载程序不能看到很多。 如果,在最新版本的EMF (因为 1.1.0 版生成 20030527_0913VL),JETEmitter 类加载器参数的构造函数。
请注意,另一种方法来指定类加载器子类 JETEmitter 在自己的项目 ; 如果不指定了任何类加载器,则 JETEmitter 将使用此子类的类加载器。 (如果使用的旧版本的电磁场有没有采取类加载器参数的构造函数,将在自己的项目没有选择,只好子类 JETEmitter。
下面的示例显示了一个操作类的转换和调用一个使用 JETEmitter 的所选的模板。 该示例显示了如何可以构造一个 JETEmitter 类加载程序参数。
ClassLoader classloader = getClass().getClassLoader(); JETEmitter emitter = new JETEmitter(templateURI, classloader);
3.类路径问题 :
JETEmitter 将转换您的模板,以 .JETEmitters 项中的 Java 源文件,并调用编译这些源代码文件 JavaBuilder。 如果您的模板使用不标准的 Java 类的类或不在插件您需要将这些类添加到类路径的 .JETEmitters 项或在 JavaBuilder 的电磁场中无法编译模板执行源代码文件。 幸运的是,JETEmitter 提供了一种执行此操作通过方法 addVariable 的 .JETEmitter 项目中添加一个类路径变量的简单方法。下面的示例显示如何将加载类到.JETEmitter中:
emitter.addVariable(Config.CLASSPATHVARIABLE, Config.PLUGIN_ID);