2

所以,这是我的问题,我有一个 Eclipse EMF 项目,我已经建立了一个模型,生成了相应的代码,还手动编写了一些与模型相对应的框架类。

我已经使用 eclipse 向导将项目调整为 Java Emitter Template (JET) 转换项目(并注意到这并没有在 MANIFEST 中生成与从头开始创建的 JET 项目相同的配置......)

我创建了一个 JET 文件,该文件创建一个 Java 类,以根据进入“参数”的输入为应用程序的主类生成代码。

然后我创建了一个动态实例,并根据模型用一些节点填充了创建的 .xmi 文件。

现在我所做的是创建一个 JET 转换运行配置,我试图将 .xmi 文件作为输入传递,并使用转换 ID 组合框中仅有的两个可用的东西之一......

如果我选择转换 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 ,我也会遇到同样的错误,而且我什至不知道它是否正确运行,因为我采取了所有这些程序来实现这一点转储.xml 文件。

我究竟做错了什么?谁能帮帮我吗?

提前致谢!

4

1 回答 1

2

由于您只有两个转换 id 选择,我想说您没有创建 JET 转换项目。如果您有,那么它的转换 ID 将显示在配置对话框的下拉列表中。

我将首先使用新项目向导创建一个新的 JET 转换项目。新转换的默认行为是将输入模型转储到包含输入模型文件的同一项目的根目录中名为 dump.xml 的文件中。创建此 JET 项目后,使用运行配置对话框针对您的 XML 文件运行转换。当您查看创建的 dump.xml 文件时,您将看到 JET 使用的实际模型。EMF 模型可以是循环的,但 JET 会将 EMF 模型调整为本质上是分层的子集。

一旦您看到有效的模型(dump.xml 文件中的模型),您就可以构建或修改您的模板以使用该模型并生成您需要的任何文件。

此外,您的问题措辞方式似乎已经为您的班级构建了一个 JET 模板,但 JET 还需要一个模板,通常称为 main.jet,它充当 MVC 意义上的控制器并负责应用其他JET 项目中的 JET 模板到模型并为生成的内容指定生成的文件名。

于 2012-08-17T16:27:12.643 回答