Maven 确保捆绑包使用相同的依赖项版本
我正在寻找一种方法来确保我在Karaf中部署的所有功能都需要具有相同版本的依赖项。该项目由40多个捆绑包组成,因此很难手动验证Maven 确保捆绑包使用相同的依赖项版本,maven,osgi,karaf,Maven,Osgi,Karaf,我正在寻找一种方法来确保我在Karaf中部署的所有功能都需要具有相同版本的依赖项。该项目由40多个捆绑包组成,因此很难手动验证 我正在考虑开发一个Maven插件来进行检查,但在此之前,我想确定这样的解决方案还不存在。如果您想确保使用相同的版本,那么就创建一个父项目并仅在那里定义依赖项的版本。因此,您可以确保所有模块都具有相同的依赖项。当然,只有当所有这些模块密切相关(例如,属于同一应用程序/发布单元)时,这才有意义。您为什么要这样做?每个bundle都应该依赖于它所需要的包的版本,并且依赖关系应
我正在考虑开发一个Maven插件来进行检查,但在此之前,我想确定这样的解决方案还不存在。如果您想确保使用相同的版本,那么就创建一个父项目并仅在那里定义依赖项的版本。因此,您可以确保所有模块都具有相同的依赖项。当然,只有当所有这些模块密切相关(例如,属于同一应用程序/发布单元)时,这才有意义。您为什么要这样做?每个bundle都应该依赖于它所需要的包的版本,并且依赖关系应该是一个范围。因此,如果您根据API包版本
1.0.0
进行编译,并且您是该API的消费者,那么您应该导入范围[1.0.0,2.0.0)
。有关详细信息,请参阅OSGi Core Release 5规范第3.7.3节(“语义版本控制”)
在运行时,OSGi框架将确保您的捆绑包连接到其允许范围内的软件包版本。显然,如果您有来自不同导入方的非重叠版本范围,那么该框架将无法通过单个导出方满足他们的要求。不,它们不是:)这就是我为什么要寻找更复杂的如果它们不是紧密相关的,那么你不应该强制要求它们具有相同的依赖关系。这会在组件之间产生紧密耦合,这会给你带来很多麻烦。相反,使用OSGi提供的灵活性并使用导入范围。顺便说一句,Karaf还允许在功能上导入范围,这可能会有所帮助。