1

根据ATL/EMFVM wikiATL/EMFTVM可以使用独立运行

ResourceSet moduleRS = new ResourceSetImpl();
moduleRS.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());

DefaultModuleResolver mr = new DefaultModuleResolver("pathToModuleDirectory", moduleRS);
TimingData td = new TimingData();
env.loadModule(mr, "ModuleName");
td.finishLoading();
env.run(td);
td.finish();

但是,这总是会产生一个异常说法Module not found。我对代码进行了非常详细的调试。在内部,aSaxParseException被抛出,这很奇怪,因为我的.emftvm 文件不是 XML 文件。任何想法如何正确加载文件?提前致谢!

4

2 回答 2

1

这(仍然)不起作用,因为您必须告诉 EMF *.emftvm 文件不是 XMI,并且需要 EMFTVMResourceFactoryImpl。ATL/EMFVM wiki 页面已使用改进的代码进行了更新;见:https ://wiki.eclipse.org/ATL/EMFVM#Standalone_use

于 2015-01-21T14:52:41.157 回答
1

我得到了旧版本的 EMFTVM,和你有同样的问题。我从github上拉了最新版本,现在可以了。

更新:@dwagelaar,啊哈,是的,我使用了 EMFVMResourceFactoryImpl;这是我使用的代码:

    ExecEnv env = EmftvmFactory.eINSTANCE.createExecEnv();
    ResourceSet rs = new ResourceSetImpl();
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("emftvm", new EMFTVMResourceFactoryImpl());

此外,不是传递一个新的 ResourceSetImpl(如 Wiki 所示),

// Don't do this! 
ModuleResolver mr = new DefaultModuleResolver("platform:/plugin/my.plugin.id/transformations/", new ResourceSetImpl());

我传入了上面初始化的rs对象。

于 2015-01-15T19:26:08.363 回答