OSGI Bundle vs jar依赖

时间:2013-02-16 18:25:02

标签: maven jar dependencies osgi bundle

我正在尝试理解以下

之间的区别
    <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依赖吗?

1 个答案:

答案 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一样工作。

但无论如何,如果您想了解更多信息,请查看以下问题:

What is the meaning of type "bundle" in a maven dependency?