0
我试图通过定义一个DSL并执行M2M以及M2T(代码生成)来实现模型驱动的开发。对于代码生成,我选择使用XPand和模板定义。您能否提供示例代码或链接到说明如何从Java代码调用模板扩展的文档?如何以编程方式从Java类运行Xpand代码生成器?
P.S.我发现很难在Eclipse以外的独立模式下运行这样的事情,所以我开始编写简单的Java实用程序。
我试图通过定义一个DSL并执行M2M以及M2T(代码生成)来实现模型驱动的开发。对于代码生成,我选择使用XPand和模板定义。您能否提供示例代码或链接到说明如何从Java代码调用模板扩展的文档?如何以编程方式从Java类运行Xpand代码生成器?
P.S.我发现很难在Eclipse以外的独立模式下运行这样的事情,所以我开始编写简单的Java实用程序。
这里是任何有兴趣的代码:
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
Map<String, Object> factoryMap = reg.getExtensionToFactoryMap();
factoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());
ResourceSet resourceSet = new ResourceSetImpl();
EPackage PSM_Pkg = MyDSLPackage.eINSTANCE;
resourceSet.getPackageRegistry().put(PSM_Pkg.getNsURI(), PSM_Pkg);
Resource resource = resourceSet.getResource(Constants.PSM_URI, true);
EList<EObject> inObjects = resource.getContents();
// Xpand
URI outURI = URI.createURI("file:///C:/Users/...");
Output out = new OutputImpl();
Outlet outlet = new Outlet(outURI.toFileString());
out.addOutlet(outlet);
XpandExecutionContextImpl executionContext = new XpandExecutionContextImpl(out, null);
// Configure the metamodels
EmfMetaModel emfMetaModel = new EmfMetaModel();
emfMetaModel.setMetaModelPackage(MyDSLlPackage.class.getName());
executionContext.registerMetaModel(emfMetaModel);
XpandFacade xpandFacade = XpandFacade.create(executionContext);
Object[] params = null;
System.out.println(inObjects.get(0));
xpandFacade.evaluate("template::Template::main", inObjects.get(0), params);
System.out.println("Code generated.");
你导入什么包? – csadan 2017-06-14 12:02:45