我编写了一个Eclipse插件,它依赖于另一个插件的1.0版本(我们称之为WidgetMaster)。现在,已经发布了WidgetMaster的2.0版,其中包含了我正在使用的许多类的界面更改。如何在支持两个版本的WidgetMaster的同时继续维护我的插件的一个版本?
到目前为止,我提出的是:
这将是一项重要的工作,因为我目前在我的插件代码中使用WidgetMaster类。如果我只依赖于我的Fragment项目中特定版本的WidgetMaster,我将不得不移动并包装所有这些。此外,99%的包装器从版本到版本都是相同的,但我仍然需要将它们复制到每个片段。
这是正确的方法还是有更好的方法来处理这种情况?
答案 0 :(得分:1)
如果您真的想为长期范围的WidgetMaster插件的不同版本提供持续支持,那么适配器模式似乎是正确的方式。
为了缩短支持时间,我会复制插件并利用我的版本控制系统及其合并功能。我创建了一个使用最新版WidgetMaster的不同分支。所以我有两个版本的插件,每个版本都会使用不同版本的WidgetMaster,调用特定版本的API调用。确保您的VCS在设置完毕后已被告知合并解决方案,以便将来的合并不会覆盖API调用自定义(例如,使用git merge的ours
策略)。
这两种不同的方法在不同的时间都有开销。适配器方法具有更大的初始开销,而VCS方法将更快地设置。但是一旦实现了适配器,开销就会很小,而VCS方法总是会有合并开销。
作为旁注,我想知道OSGi片段是否真的是您设置使用WidgetMaster的版本的最佳选择(如果您选择适配器方法)。 我不是OSGi专家,但您可以查看OSGi service factories to give you the right version of WidgetMaster。显然,有更多的进化方式可以用OSGi实现依赖注入:Apache Felix Maven SCR Plugin,Blueprint Container,Apache Felix iPojo。 This SO question似乎涵盖了OSGi中的DI问题。
祝你好运!我想知道你走哪条路,因为我很快就会遇到类似的挑战!