根据ATL/EMFTVM wiki,ATL/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
。我仔细调试了代码。在内部,抛出SaxParseException
,这很奇怪,因为我的 .emftvm文件不是XML文件。我有什么想法可以正确加载文件?提前谢谢!
答案 0 :(得分:1)
我得到了旧版本的EMFTVM,并且遇到了和你一样的问题。我从github上下载了最新版本,现在很好。
更新: @dwagelaar,啊哈,是的,我使用了EMFTVMResourceFactoryImpl;这是我用的代码btw:
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 对象。
答案 1 :(得分:1)
这(仍然)不起作用,因为您必须告诉EMF * .emftvm文件不是XMI,并且需要EMFTVMResourceFactoryImpl。 ATL / EMFTVM维基页面已更新,改进了代码;见:https://wiki.eclipse.org/ATL/EMFTVM#Standalone_use