【发布时间】:2015-08-07 11:58:47
【问题描述】:
我正在寻找一种方法来确保我在 Karaf 中部署的所有功能都需要具有相同版本的依赖项。该项目由 40 多个捆绑包组成,难以手动验证。
我正在考虑开发一个 Maven 插件来进行检查,但在此之前我想确定这样的解决方案还不存在。
【问题讨论】:
我正在寻找一种方法来确保我在 Karaf 中部署的所有功能都需要具有相同版本的依赖项。该项目由 40 多个捆绑包组成,难以手动验证。
我正在考虑开发一个 Maven 插件来进行检查,但在此之前我想确定这样的解决方案还不存在。
【问题讨论】:
如果您想确保使用相同的版本,请创建一个父项目并仅在那里定义依赖项的版本。因此,您可以确保所有模块都具有相同的依赖关系。当然,这只有在所有这些模块都非常密切相关(例如属于同一个应用程序/发布单元)时才有意义。
【讨论】:
您为什么要这样做?每个包应该依赖于它需要的包的版本,并且依赖应该是一个范围。因此,如果您针对 API 包版本 1.0.0 进行编译,并且您是该 API 的使用者,那么您应该使用范围 [1.0.0, 2.0.0) 导入。有关详细信息,请参阅 OSGi Core Release 5 规范的第 3.7.3 节(“语义版本控制”)。
在运行时,OSGi 框架将确保您的包连接到其允许范围内的包版本。显然,如果您有来自不同导入器的非重叠版本范围,那么框架将无法通过单个导出器满足它们。
【讨论】: