我正在尝试理解以下
之间的区别 <dependency>
<groupId>com.myspace.order</groupId>
<artifactId>dal</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
和
<dependency>
<groupId>com.myspace.order</groupId>
<artifactId>dal</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>bundle</type>
</dependency>
dal工件本身的包装指定为bundle:
<packaging>bundle</packaging>
现在,当我部署dal工件时,我发现它在repo中作为jar发布(其中包含一个清单)。在这种情况下,我对dal的依赖应该是什么。它应该是捆绑式还是罐型?如果我正在做OSGI,我认为方法是将类型指定为bundle。它是否正确?或者,我可以在这里拥有jar依赖吗?
答案 0 :(得分:12)
当你在Maven中声明一个依赖项时,你只能依赖普通的Jar而不是bundle,因为Maven不能识别OSGi环境限制。
看到这个问题:
Why can't maven find an osgi bundle dependency?
在编译项目时,您不必担心(但应该!)关于OSGi环境...例如,如果您尝试使用未通过捆绑包导出的包,它将不会抱怨依赖于....
当您尝试在OSGi容器中部署捆绑包时,如果您正确地声明了您使用的“dal”包的依赖关系,当然包括版本(通常您应该留给maven-bundle-plugin来做对于基于POM的人来说,只有在容器中有一个捆绑包可以在正确的版本(或版本范围)中导出所需的包时才能解决它。
考虑到'dal'似乎已经是一个捆绑包,你只需要确保将你的捆绑包和'dal'一起部署,一切都会正常工作。
但是,如果你错误地添加了对'dal'私有包的依赖,虽然Maven很乐意为你编译它,当你在OSGi中抛出它时,你会受到一个令人讨厌的布线异常的欢迎:)
请注意,bundle只是一个普通的jar,它包含清单中的OSGi元数据(Bundle-SymbolicName,Bundle-Version等)。因此,如果您不使用OSGi,捆绑包将像任何其他jar一样工作。
但无论如何,如果您想了解更多信息,请查看以下问题: