首页 文章

OSGI Bundle vs jar依赖

提问于
浏览
8

我试图理解以下之间的区别

<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的依赖应该是什么 . 它应该是捆绑式还是 jar 型?如果我正在做OSGI,我认为方法是将类型指定为bundle . 它是否正确?或者,我可以在这里拥有jar依赖吗?

1 回答

  • 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?

相关问题