Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 确保捆绑包使用相同的依赖项版本_Maven_Osgi_Karaf - Fatal编程技术网

Maven 确保捆绑包使用相同的依赖项版本

Maven 确保捆绑包使用相同的依赖项版本,maven,osgi,karaf,Maven,Osgi,Karaf,我正在寻找一种方法来确保我在Karaf中部署的所有功能都需要具有相同版本的依赖项。该项目由40多个捆绑包组成,因此很难手动验证 我正在考虑开发一个Maven插件来进行检查,但在此之前,我想确定这样的解决方案还不存在。如果您想确保使用相同的版本,那么就创建一个父项目并仅在那里定义依赖项的版本。因此,您可以确保所有模块都具有相同的依赖项。当然,只有当所有这些模块密切相关(例如,属于同一应用程序/发布单元)时,这才有意义。您为什么要这样做?每个bundle都应该依赖于它所需要的包的版本,并且依赖关系应

我正在寻找一种方法来确保我在Karaf中部署的所有功能都需要具有相同版本的依赖项。该项目由40多个捆绑包组成,因此很难手动验证


我正在考虑开发一个Maven插件来进行检查,但在此之前,我想确定这样的解决方案还不存在。

如果您想确保使用相同的版本,那么就创建一个父项目并仅在那里定义依赖项的版本。因此,您可以确保所有模块都具有相同的依赖项。当然,只有当所有这些模块密切相关(例如,属于同一应用程序/发布单元)时,这才有意义。

您为什么要这样做?每个bundle都应该依赖于它所需要的包的版本,并且依赖关系应该是一个范围。因此,如果您根据API包版本
1.0.0
进行编译,并且您是该API的消费者,那么您应该导入范围
[1.0.0,2.0.0)
。有关详细信息,请参阅OSGi Core Release 5规范第3.7.3节(“语义版本控制”)


在运行时,OSGi框架将确保您的捆绑包连接到其允许范围内的软件包版本。显然,如果您有来自不同导入方的非重叠版本范围,那么该框架将无法通过单个导出方满足他们的要求。

不,它们不是:)这就是我为什么要寻找更复杂的如果它们不是紧密相关的,那么你不应该强制要求它们具有相同的依赖关系。这会在组件之间产生紧密耦合,这会给你带来很多麻烦。相反,使用OSGi提供的灵活性并使用导入范围。顺便说一句,Karaf还允许在功能上导入范围,这可能会有所帮助。