如何在 OSGi 中导入大于或等于 1.0.0 的任何版本的包?

How can I import a package at any version greater than or equal to 1.0.0 in OSGi?

我正在尝试导入 OSGi 包,任何大于或等于 1.0.0 的版本均有效。基本上,我只是想确保我没有得到任何 0.x 版本,但除此之外,任何版本都是可以接受的。我如何允许 1.0.0(含)和无穷大(无界)之间的所有版本。

我试过以下方法:

com.mypackage.example;version="[1.0.0,)"
com.mypackage.example;version="[1,)"
com.mypackage.example;version="[1.0.0]"
com.mypackage.example;version="[1.0.0)"

我也看过这个问题:OSGI Valid Version Ranges。但它似乎引用了 Java API 而不是 MANIFEST.MF Import-Package header.

要为软件包指定 [1.0.0,infinity) 的版本范围,只需在引号中包含版本号:

com.mypackage.example;version="1.0.0"

这将允许任何大于或等于 1.0.0 的版本。

由于指定单个版本号意味着 unbounded/infinite 范围,您可能想知道如何导入包的特定版本(而不是其他版本)。您可以通过指定从版本到自身的范围来做到这一点:

com.mypackage.example;version="[1.3.1,1.3.1]"

所有这些信息都来自 OSGi Concepts 上的 Eclipse 文档(特别是 Versioning 部分)。

已经有一个答案解释了如何做到这一点,但我有责任说 没有人应该这样做

为包导入设置上限是 API 进化和语义版本控制的重要组成部分。如果您声称可以使用所有未来版本,那么您最终会被 API 更改破坏。

Export-Package 的版本从 1.x 移动到 2.0 意味着已经进行了 重大更改 。您所依赖的方法可能不再存在,或者行为可能有所不同。说您将与 API.

的所有未来版本兼容是不安全的

导入版本 1.0 API 时使用的正确版本范围是 "[1,2)" 如果您是消费者或 "[1,1.1)" 如果您是提供者。

消费者是 API 的 "typical users",例如如果我写一个 Servlet 我就是 "consumer" 的 Servlet API。提供者是为 API(例如 TomCat)提供支持实现的人。请注意,这与说实现接口使您成为提供者不同 - 使用 Servlet API 需要您实现 Servlet 接口。