Eclipse 如何在Acceleo项目中设置自定义元模型?

Eclipse 如何在Acceleo项目中设置自定义元模型?,eclipse,eclipse-emf-ecore,metamodel,acceleo,ecore,Eclipse,Eclipse Emf Ecore,Metamodel,Acceleo,Ecore,我尝试从我的自定义元模型生成生成器。我创建它的Obeo设计师-它是ecore元模型 所以我创建了一个新的Acceleo项目,从“运行时版本”中选择我的元模型URI()并尝试运行它 但项目无法运行,我遇到异常: Caused by: org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http://org/model/ros' not found. (file:/C:/Users/Jakub%20Kitaj/D

我尝试从我的自定义元模型生成生成器。我创建它的Obeo设计师-它是ecore元模型

所以我创建了一个新的Acceleo项目,从“运行时版本”中选择我的元模型URI()并尝试运行它

但项目无法运行,我遇到异常:

Caused by: org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http://org/model/ros' not found. (file:/C:/Users/Jakub%20Kitaj/Downloads/ObeoDesigner-Community-8.1-win32.win32.x86/ObeoDesigner-Community/workspace/TestAcceleo/model/example.ros, 2, 120)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.getPackageForURI(XMLHandler.java:2625)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.getFactoryForPrefix(XMLHandler.java:2458)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectByType(XMLHandler.java:1335)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createTopObject(XMLHandler.java:1504)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:1026)
at org.eclipse.emf.ecore.xmi.impl.XMIHandler.processElement(XMIHandler.java:78)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:1008)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:719)
at org.eclipse.emf.ecore.xmi.impl.XMIHandler.startElement(XMIHandler.java:190)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:175)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:261)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1518)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1297)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:259)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)
... 6 more
我想我应该设置我的自定义元模型,但我如何才能做到这一点

编辑:

我添加此代码行:
resourceSet.getPackageRegistry().put(“http://org/model/ros“,Package.class)但是我得到了同样的错误<代码>http://org/model/ros
是我的元模型nsUri和
包。class
是我的元模型对象中元素的实例:(


我还能做什么?:(

要使您的UML模型可加载,您需要做什么,如下所示:

EPackage.Registry.INSTANCE.put(UMLPackage.eNS_URI,UMLPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(UMLResource.FILE_扩展名,UMLResource.Factory.INSTANCE)

对于您可能需要的每个元模型也是如此,只需根据您的元模型将UMLPackage更改为XxxPackage即可。资源工厂对于UML是必需的,但您的元模型可能不需要资源工厂;如果您没有自定义工厂,只需忽略这一行即可


您需要将这两行放在模型加载点之前。对于Acceleo,这是在生成的Java启动器中完成的:只需更改registerPackages和RegisterResources方法的实现即可添加这些所需的行。

也许您应该编译元模型(使用emf)首先,将其导出到jar文件,将其粘贴到eclipse插件文件夹并重新启动eclipse


您可以右键单击.ecore模型并单击“新建”。“其他”。。然后找到“Emf生成器模型”(下一步>下一步>加载>下一步>完成…)然后,您将获得一个.genmodel文件。打开此文件后,单击根元素并单击“全部生成”,它将生成一组项目。然后,您将转到导出插件的过程。右键单击项目并单击“导出…”>“插件开发”>“可部署插件和片段”,完成所有过程..然后复制生成的jar文件并粘贴到eclipse安装文件夹内的plugins文件夹中,然后重新启动eclipse..神奇的是,您将从元模型中完成代码:'D

I添加此代码行:
resourceSet.getPackageRegistry().put('http://org/model/ros“,Package.class)
但我也有同样的错误。
http://org/model/ros
是我的元模型nsUri和
包。class
是我的元模型对象中元素的实例。:(我还能做什么?:(您是否更改了RegisterResources方法的实现?否,我通过向导和仅更改registerPackages方法创建了新的Acceleo项目。我没有自定义工厂。现在我唯一能想到的是尝试通过向plugin.xml文件添加扩展名来解决此问题:嗯……我的项目中没有
plugin.xml
文件:(