Не удается прочитать модуль из преобразования ATL EMFTVM в автономном проекте Java
Согласно вики ATL / EMFTVM, 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. Любые идеи, как я могу загрузить файл правильно? Заранее спасибо!
2 ответа
Я получил старую версию EMFTVM, и у меня та же проблема, что и у вас. Я вытащил последнюю версию из GitHub, и теперь все в порядке.
Обновления: @dwagelaar, ага, да, я использовал EMFTVMResourceFactoryImpl; Вот код, который я использовал, кстати:
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(как указано в вики),
// Don't do this!
ModuleResolver mr = new DefaultModuleResolver("platform:/plugin/my.plugin.id/transformations/", new ResourceSetImpl());
Я передал объект rs, инициализированный выше.
Это (все еще) не работает, потому что вы должны сказать EMF, что файлы *.emftvm не являются XMI и требуют EMFTVMResourceFactoryImpl. Вики-страница ATL/EMFTVM была обновлена улучшенным кодом; см.: https://wiki.eclipse.org/ATL/EMFTVM