我必须做一个不是我自己写的项目。它使用Ecore EMF (我对此没有经验),我不知道如何解决这个错误:
在某个时刻,程序使用以下函数加载一个.xmi文件: org.eclipse.emf.ecore.xmi.impl.XMLHandler.getPackageForURI()
这会导致这个错误:找不到带有uri 'platform:/plugin/Animals/model/Animals.ecore‘的org.eclipse.emf.ecore.xmi.PackageNotFoundException:包。(文件:/C:/Users/model917.xmi,2,193)
文件error 917.xmi似乎存在,并且不是此错误的根源。我认为这个问题是因为找不到Animals.ecore文件造成的。在model917.xmi文件中,我发现了以下语句:
xmlns:动物="platform:/plugin/Animals/model/Animals.ecore
因此,我认为文件model917.xmi中的模型使用了Animals.ecore中定义的另一个模型,该模型无法找到并导致错误。
我访问了Animals.ecore文件,并发现EMF/ecore使用类似注册表的东西来查找此类文件。因此,似乎我必须将Animals.ecore文件添加到这个注册表中,我在网上找到了一些答案,但这些答案都不起作用,我想不出下一步要尝试什么。谁能给我一个简单的方法来注册这个文件,这样它就会被找到?如果这是相关的,我正在使用Eclipse /也许有一种使用Eclipse的简单方法。
发布于 2021-11-08 08:07:34
通常,基于EMF的软件应该依赖于EPackages的所谓“名称空间URI”(nsURI),它的形式通常是"http://foo/bar/Animals"“。
应该在EMF Registry中注册"http://foo/bar/Animals“,并根据您的实际运行时情况将其分派到类似于”platform:/ Animals.ecore /bar.foo/ Animals.ecore“(当文件Animals.ecore被部署在基于Eclipse的应用程序的Eclipse插件中时)、”platform://bar.foo/Animals.ecore“(当文件Animals.ecore被部署在运行的基于Eclipse的应用程序的工作区中)或甚至"file:///path/to/Animals.ecore”“(文件系统上的任何位置)的URI中。从技术上讲,只要在运行时正确解析,您就可以使用这些URI形式中的任何一种,但是您必须理解,并非所有URI在所有上下文中都有意义,例如,"platform:/“URI只有在基于Eclipse的上下文中才有意义。nsURIs应该在所有上下文中都是可解析的(感谢注册表!)
您的代码是否应该在基于Eclipse的应用程序的上下文中运行?那么包含Animals.ecore的项目应该部署为插件,我猜目前还不是。你的代码是独立的吗?那么xmi文件中对ecore文件的引用就不应该是"platform:/...“而是"http://foo/bar/Animals“的形式( EPackage的nsURI,它是Animals.ecore的根元素)
https://stackoverflow.com/questions/69841789
复制相似问题