所以,这是我的问题,我有一个Eclipse EMF项目,我已经构建了一个模型,生成了相应的代码,并且还手动编写了一些与模型相对应的框架类。
我已经使用eclipse向导将项目调整为Java Emitter Template(JET)Transformation项目(并注意到这并没有在MANIFEST中生成相同的配置,JET Project从头开始创建...... )
我创建了一个JET文件,它根据进入“参数”的输入创建一个Java类来为应用程序的主类生成代码。
然后我创建了一个Dynamic实例,并根据模型用一些节点填充了创建的.xmi文件。
现在我所做的是创建一个JET Transformation运行配置,我试图将.xmi文件作为输入传递,并使用Transformation ID组合框中唯一可用的两个内容...
如果我选择Transformation ID为jet2,我会在控制台中获得此输出:
templates/main.jet(8,1): <c:setVariable var='org.eclipse.jet.taglib.control.iterateSetsContext' select='true()'>
Trace: completed action.
templates/main.jet(29,1): <c:if test='isVariableDefined(''org.eclipse.jet.resource.project.name'')'>
Trace: processing body
templates/dump.jet(2,1): <c:dump select='/*' format='true' entities='true'>
Trace: completed action.
templates/main.jet(30,5): <ws:file template='templates/dump.jet' path='{$org.eclipse.jet.resource.project.name}/dump.xml'>
Trace: completed action.
Successful Execution
如果相反,我选择转化ID为org.eclipse.jet.transforms.taglib.doc(唯一可用的其他选项),我得到:
templates/control.jet(8,1): <c:setVariable var='jetPluginNS' select='''org.eclipse.jet'''>
Trace: completed action.
templates/control.jet(9,1): <c:setVariable var='tagLibrariesXP' select='concat($jetPluginNS, ''.tagLibraries'')'>
Trace: completed action.
templates/control.jet(15,1): <c:setVariable var='pluginNS' select='$org.eclipse.jet.resource.project.name'>
Trace: completed action.
templates/control.jet(16,1): <c:setVariable var='docPlugin' select='concat($org.eclipse.jet.resource.project.name, ''.doc'')'>
Trace: completed action.
templates/control.jet(21,5): <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
Trace: loop initialized
templates/control.jet(21,5): <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
Trace: finished loop
templates/control.jet(69,5): <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
Trace: loop initialized
templates/control.jet(69,5): <c:iterate select='/plugin/extension[@point = $tagLibrariesXP]' var='extension'>
Trace: finished loop
Successful Execution
在任何一种情况下,我都没有从generate方法中获取任何生成的Java类,但是两者都说它们是成功的......同样,在第一种情况下通过控制台消息,我看到生成了dump.xml文件使用该文件的一种xmi到xml的转换,但没有与Java或我定义在JET生成类中创建的任何方法的任何关联......
此外,如果在生成提到的dump.xml文件后,我尝试将其用作输入,它告诉我我的Application对象未找到或是抽象的。事实上,生成的包中的一个确实是一个接口,但即使我尝试使用Impl一个我得到相同的错误,我甚至不知道它是否正确行事因为我采取的所有这个程序dump.xml文件。
我做错了什么?有人可以帮帮我吗?
提前致谢!
答案 0 :(得分:2)
由于你只有两个转换ID的选择,我会说你没有创建一个JET转换项目。如果你有,那么它的变换id将显示在配置对话框的下拉列表中。
我首先使用新项目向导来创建一个新的JET转换项目。新转换的默认行为是将输入模型转储到包含输入模型文件的同一项目的根目录中名为dump.xml的文件中。创建此JET项目后,使用运行配置对话框对XML文件运行转换。当您查看创建的dump.xml文件时,您将看到JET使用的实际模型。 EMF模型可以是周期性的,但JET会将EMF模型调整为分层的子集。
一旦看到有效模型(dump.xml文件中的模型),您就可以构建或修改模板以使用该模型并生成所需的任何文件。
此外,您的问题的措辞似乎已经为您的类构建了一个JET模板,但是JET还需要一个模板,通常称为main.jet,它充当MVC意义上的控制器并且负责将JET项目中的其他JET模板应用于模型并为生成的内容指定结果文件名。