我编写了一个Eclipse插件,该插件依赖于另一个插件的1.0版(我们称它为WidgetMaster)。现在,WidgetMaster的2.0版已经发布,并且在我使用的许多类上都有界面更改。如何在支持两种版本的WidgetMaster的同时继续维护我的插件的一个版本?

到目前为止,我想出的是:

  • 为WidgetMaster提供的所有功能创建我自己的界面。这意味着我还必须为我使用的所有类型创建包装器,这很多。
  • 对于WidgetMaster的每个受支持的版本,创建一个Fragment项目,该项目根据该版本的API来实现我的接口和所有包装器类。

  • 这将是一项艰巨的工作,因为我目前在整个插件代码中都使用WidgetMaster类。如果我仅依赖于Fragment项目中的WidgetMaster的特定版本,那么我将不得不移动并包装所有这些内容。同样,每个版本的包装器中有99%是相同的,但是我仍然必须将它们复制到每个Fragment中。

    这是正确的方法还是有更好的方法来处理这种情况?

    最佳答案

    如果您真的想为WidgetMaster插件的不同版本提供长期支持,那么Adapter模式似乎是正确的方法。
    为了缩短支持时间,我将复制该插件并利用我的版本控制系统及其合并功能。我将创建一个不同的分支,使用最新版本的WidgetMaster。因此,我将有两个版本的插件,每个版本将使用不同版本的WidgetMaster,并调用特定版本的API调用。设置完所有合并后,请确保已通知您的VCS,以便将来的合并不会覆盖API调用自定义项(例如,带有git merge的ours策略)。
    两种不同的方法都有开销,但是时间不同。适配器方法的初始开销较大,而VCS方法的设置速度更快。但是,一旦实现了适配器,开销将降至最低,而VCS方法将始终具有合并开销。
    附带说明一下,我想知道OSGi片段是否真的是设置WidgetMaster使用版本的最佳选择(如果您选择Adapter方法)。 我不是OSGi专家,但是您可以研究OSGi service factories to give you the right version of WidgetMaster。显然,还有更多使用OSGi完成依赖项注入的方法:Apache Felix Maven SCR PluginBlueprint ContainerApache Felix iPojoThis SO question似乎涵盖了OSGi中的DI问题。
    祝好运!我想知道您选择的路线,因为我很快就会面临类似的挑战!

    关于eclipse - Eclipse插件兼容性层(使用片段吗?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19553213/

    10-11 20:49