Eclipse plugin 如何将插件分组到功能中
我们正在努力学习如何正确使用功能 假设我们有一个插件Eclipse plugin 如何将插件分组到功能中,eclipse-plugin,osgi,Eclipse Plugin,Osgi,我们正在努力学习如何正确使用功能 假设我们有一个插件org.acme.module,它依赖于org.thirdparty.specific和org.acme.core 我们还有插件org.acme.other,它依赖于org.acme.core 我们希望从这些文件创建一个应用程序,其中包括一个目标文件和一个产品文件。我们有以下选择: 每个模块一项功能: org.acme.core.feature org.acme.core org.acme.module.feature org.acme
org.acme.module
,它依赖于org.thirdparty.specific
和org.acme.core
我们还有插件org.acme.other
,它依赖于org.acme.core
我们希望从这些文件创建一个应用程序,其中包括一个目标文件和一个产品文件。我们有以下选择:
每个模块一项功能:
org.acme.core.feature
org.acme.core
org.acme.module.feature
org.acme.module
org.acme.other.feature
org.acme.other
org.thirdparty.specific.feature
org.thirdparty.specific
org.acme.module.feature
org.acme.core
org.acme.module
org.thirdparty.specific
org.acme.other.feature
org.acme.core
org.acme.other
org.acme.core
改变时,您需要改变所有的特性。此外,应用程序在打包什么方面没有发言权,因此它甚至无法决定更新org.acme.core
(因为有错误修复或其他原因)
平台功能:
org.acme.platform.feature
org.acme.core
org.acme.other
(但可能是它自己的功能)org.thirdparty.specific
org.acme.module.feature
org.acme.module
org.acme.platform.feature
,因此每当任何平台插件发生任何更改时,您都必须相应地更新org.acme.platform.feature
实际上,我们只用了大约50个平台插件就尝试了这种方法。让开发人员为每一个错误修复更改功能是不可行的。(虽然Tycho支持版本“0.0.0”,但Eclipse不支持,因此使用它是另一个问题。此外,我们需要可复制性,因此让PDE随意选择版本是不可能的。)
这一切再次归结为“在新功能发布前的两周内,我不能使用org.acme.platform.feature
并覆盖org.acme.core
的版本
整个问题变得更加困难,因为有时可能会有多个插件配置(比如针对不同的数据库提供程序),然后会有高级模块使用其他子模块来正确工作,这必须以某种方式进行管理 我们缺少什么吗?其他公司如何处理这些问题
Eclipse人员似乎使用“每个模块一个功能”的方法。这并不奇怪,因为这是唯一有效的方法。但他们不使用目标平台或产品文件。成功分组的关键是何时在功能中使用“包含”,何时只使用依赖项。区别在于“包含”“是真正包含的,即p2将始终安装包含的捆绑包和/或包含的功能。这就是为什么您需要在每个功能中更新一个包(如果包括它)的原因。如果不进行更新,则在安装过程中会出现多个版本 此外,在过去,必须在功能中指定依赖项。现在,p2将主要从bundle中找出依赖项。因此,我实际上会停止在特性中指定依赖项,而只是包括。将特性视为一种指定聚合内容的方法 分组的另一个关键点是-少就是多。如果您有尽可能多的功能包,那么很可能会出现粒度问题。相反,请考虑用户将分别安装什么。对于用户永远不会单独安装的东西,不需要有四个特性。特性不应被理解为对开发/项目结构进行分组的一种方式——这是SCM或不同SCM repo中的文件夹可以使用的地方。将特性视为部署结构 使用这种方法,我建议使用类似于以下示例的结构 my.product.base
- 包含产品最小值的基本特征
- 可以是org.acme.core加上一些最小值
- my.product.base的第三方库功能
- 功能绑定附加组件
- 可单独安装的独立功能
- 用于附加依赖项的第三方库