我想比較兩種型號,其符合給定的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已經存在。所以只需生成模型代碼並正確註冊包裝。 –