我有两个不同版本的 EMF 插件,可以加载某个 .xmi。后一个版本已更改,因此与前一个版本的 xmi 不兼容。我想要做的是使用第一个插件加载 xmi,然后使用新插件以编程方式构建模型,从而迁移旧模型。除了 EMF 模型中的一些变化之外,它们是相同的。
如何加载这些插件?是否可以?有更好的策略吗?
我有两个不同版本的 EMF 插件,可以加载某个 .xmi。后一个版本已更改,因此与前一个版本的 xmi 不兼容。我想要做的是使用第一个插件加载 xmi,然后使用新插件以编程方式构建模型,从而迁移旧模型。除了 EMF 模型中的一些变化之外,它们是相同的。
如何加载这些插件?是否可以?有更好的策略吗?
我建议更改旧版本的 id(可能还有 EMF 包 URI),这样您就可以同时拥有两个代码和模型。
由于您需要在同一个插件(迁移器)中同时处理旧类和新类,因此您无法同时工作。
但是,您应该查看动态 EMF 技术,您可以在其中打开旧模型而不使用其生成的包(另一方面,您必须使用反射 API)。使用这种方法,您可以编写一个转换器,使用 EMF 反射 API 打开旧模型,然后手动将其转换为新模型版本。
抱歉,这是不可能的,因为这些插件是单例的。由于 Java 基类妨碍了您,因此您无法在迁移期间切换插件。
一种可能的解决方案是使用EDapt技术。该技术允许您在加载模型时自动迁移模型。我在两个不同的项目中使用了 COPE(EDapt 的前身)并取得了巨大成功。