【问题标题】:Version changing in OSGi packagesOSGi 包中的版本更改
【发布时间】:2014-01-30 00:40:30
【问题描述】:

我正在考虑在我们的项目中管理版本控制的最佳方式。目前,我们的包中的每个包都被导出(这将在以后改进,所以不要挂断这个失礼)。我们正在使用 maven-bundle-plugin,它可以从 packageinfo 文件中获取 package 版本,或者如果没有文件,则从 bundle-version(即 pom版本)。

所以我的问题是,似乎每个包都有一个 packageinfo 很多(再次,我知道减少导出的包可以解决这个问题)所以我想知道为什么最好有一个每个包的版本而不是全局版本(捆绑版本)?

所以说捆绑 A 已发布

 A (1.0.0)
 |...foo (1.0.0)
 |...bar (1.0.0)

现在如果 package bar 发生变化,发布 bundle A 的理想方式是

 A (1.0.1)
 |...foo (1.0.0)
 |...bar(1.0.1)

拥有一个版本以使 foo 发布为 1.0.1,即使它的内容没有改变,会不会很糟糕(如果是,为什么?)?因为除了在每个导出的包中都有一个 packageinfo 文件外,开发人员还需要记住调整版本(他们会忘记),而包的版本是由 maven-release- 自动调整的插入。请注意,我不是在谈论使用 require-bundle。我仍然想使用 import-package 来获得它带来的粒度,并在需要时可以选择通过 packageinfo 控制包版本,但我正在尝试简化开发人员的工作流程和记忆,一个想法是仅在特殊情况下保留 packageinfo 而不是推荐的“无处不在”

看到它的方式,非常务实,我必须在发布具有相同版本的两个不同软件包的危险之间做出选择(开发人员在更改后忘记增加数字),这对我来说似乎非常糟糕 VS 发布两个相同的软件包使用不同的版本,我不知道它会带来什么危险,因此我的问题

【问题讨论】:

  • 请澄清。为什么再次发布相同版本的软件包会有危险?如果自上次发布以来该软件包实际上没有更改,那么它应该是相同的版本。
  • 我的意思是,危险在于发布一个 DID CHANGE 的软件包具有相同的版本。这种情况是开发人员更改了代码但没有增加 packageinfo 中的数字。我正在比较这与总是碰撞包版本的影响,即使包没有改变。希望更清楚

标签: osgi versioning


【解决方案1】:

您管理版本的方式可能取决于您编写的软件类型。在任何情况下,您作为包导出的任何内容都是 API(无论是内部的还是公共的)或您想要共享的库。您应该只公开最少的包以实现良好的解耦。

现在正如您所提到的,有两种流行的版本控制方案:

  1. 对整个捆绑包进行版本控制。这意味着每个包导出都有包的版本
  2. 分别对每个包进行版本控制

如果您自己的应用程序主要依赖于共享包,则变体 1 是合适的。它在库中也很受欢迎,因为它很容易添加到现有库中。主要优点是容易实现。只需让 Maven 捆绑插件使用其默认值。如果使用您共享包的包与导出包的包一起发布,则效果最佳。

变体 2 适用于许多松散耦合的其他应用程序使用的 API。按包进行仔细的版本管理可确保 API 的更改对现有用户的影响最小。代价是您需要更多的考虑和努力才能很好地管理版本。因此,OSGi 规范就是一个很好的例子。随着时间的推移,它们在引入新功能的同时实现了出色的兼容性。

我可以分享一个案例,即按包进行版本控制不是最佳的。 servlet API 3.0 的第一个预览版只导出了 3.0 包版本。因此,如果这将是正式版本,那么每个使用旧 API 2.5 的包都必须切换,因为默认导入范围总是排除下一个主要版本。最后,为所有兼容包导出了新旧版本。这样可以最大限度地减少对用户的影响。

顺便说一句。如果您使用 maven bundle 插件,那么即使在按包进行版本控制的情况下,bundle 的用户也不必做太多事情。 Bnd 会自动查看每个包的版本,并将导入范围基于此信息而不是包版本。

所以基本上要考虑对用户的影响。特别是当你做一个新的主要版本时。测试针对旧版本包编译的用户包。

【讨论】:

  • 我不同意。正如您所说,方案 1 永远没有用处。如果你打算这样做,那么根本不要打扰版本控制包,因为你分配的版本没有任何意义。不幸的是,我目前没有时间写一个完整的答案来解释这一点,但我会这样做。
  • 我提到的方案被大多数项目使用。因此,虽然它并不完美,但它的目的是使这些项目在 OSGi 中可用。如果您希望他们进行适当的基于包的版本控制,他们可能根本没有 OSGi 元数据。
  • @NeilBartlett 我对您解释为什么方案 1 永远无用的完整答案很感兴趣。请在此处发布链接。我目前也是根据软件需要选择这两种方案的。
猜你喜欢
  • 2019-04-22
  • 2020-07-29
  • 2015-01-18
  • 1970-01-01
  • 2020-04-02
  • 2013-12-26
  • 2020-05-10
  • 2015-01-08
  • 2021-06-25
相关资源
最近更新 更多