1

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。コードを詳細にデバッグしました。私の.emftvm ファイルは XML ファイルではないため、内部的に aSaxParseExceptionがスローされます。ファイルを適切にロードする方法はありますか? 前もって感謝します!

4

2 に答える 2

1

私は古いバージョンの 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());

また、(Wiki に示されているように) 新しい ResourceSetImpl を渡す代わりに、

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

上記で初期化したrsオブジェクトを渡しました。

于 2015-01-15T19:26:08.363 に答える
1

*.emftvm ファイルが XMI ではなく、EMFTVMResourceFactoryImpl が必要であることを EMF に伝える必要があるため、これは (まだ) 機能しません。ATL/EMFTVM wiki ページが更新され、コードが改善されました。参照: https://wiki.eclipse.org/ATL/EMFTVM#Standalone_use

于 2015-01-21T14:52:41.157 に答える