我想比较两种型号,其符合给定的Ecore元模型是这样的:EMF比较两款车型
public void compare() {
URI uri1 = URI.createFileURI("file1.xmi");
URI uri2 = URI.createFileURI("file2.xmi");
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
ResourceSet resourceSet1 = new ResourceSetImpl();
ResourceSet resourceSet2 = new ResourceSetImpl();
resourceSet1.getResource(uri1, true);
resourceSet2.getResource(uri2, true);
IComparisonScope scope = new DefaultComparisonScope(resourceSet1, resourceSet2, null);
Comparison comparison = EMFCompare.builder().build().compare(scope);
List<Diff> differences = comparison.getDifferences();
// Let's merge every single diff
IMerger.Registry mergerRegistry = new IMerger.RegistryImpl();
IBatchMerger merger = new BatchMerger(mergerRegistry);
merger.copyAllLeftToRight(differences, new BasicMonitor());
}
如果我运行这段代码我得到错误Package with uri '/uri/of/the/package' not found
,这是元模型的URI。我试图通过右键点击注册ecore模型,然后Register EPackages
,但它没有解决。我在做什么错了?`我如何注册软件包(我更喜欢静态但动态也可以)。
不,它不是'xmi'。我只是用它来举例。我们称之为'.xmj'。不,没有生成的模型代码只是ecore和genmodel – landunder
您需要生成的EPackage和EFactory,否则emf不知道如何解析您的xmi文件。不过,可以在没有任何模型代码的情况下加载'* .ecore'文件,因为EcorePackage已经存在。所以只需生成模型代码并正确注册包装。 –