OSGI Bundle vs jar依赖

Sud*_*oer 8 dependencies osgi bundle jar maven

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

    <dependency>
        <groupId>com.myspace.order</groupId>
        <artifactId>dal</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

    <dependency>
        <groupId>com.myspace.order</groupId>
        <artifactId>dal</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>bundle</type>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

dal工件本身具有指定为bundle的包装:

<packaging>bundle</packaging>
Run Code Online (Sandbox Code Playgroud)

现在,当我部署dal工件时,我发现它在repo中作为jar发布(其中包含一个清单).在这种情况下,我对dal的依赖应该是什么.它应该是捆绑式还是罐型?如果我正在做OSGI,我认为方法是将类型指定为bundle.它是否正确?或者,我可以在这里拥有jar依赖吗?

Ren*_*ato 12

当你声明在Maven的依赖,你只能靠正常的罐,没有捆绑,因为Maven的不承认OSGi环境的限制.

看到这个问题:

为什么maven找不到osgi bundle依赖?

在编译项目时,您不必担心(但应该!)关于OSGi环境......例如,如果您尝试使用未依赖的软件包导出的软件包,它将不会抱怨在....

当您尝试在OSGi容器中部署捆绑包时,如果您正确地声明了您使用的"dal"包的依赖关系,当然包括版本(通常您应该留给maven-bundle-plugin为您做的事情)在您的POM上),只有在容器中有一个捆绑包,它才能在正确的版本(或版本范围)中导出所需的包.

考虑到'dal'似乎已经是一个捆绑包,你只需要确保将你的捆绑包和'dal'一起部署,一切都会正常工作.

但是,如果你错误地添加了对'dal'私有包的依赖,虽然Maven很乐意为你编译它,当你在OSGi中抛出它时,你会受到一个讨厌的布线异常的欢迎:)

请注意,bundle只是一个普通的jar,它包含清单中的OSGi元数据(Bundle-SymbolicName,Bundle-Version等).因此,如果您不使用OSGi,捆绑包将像任何其他jar一样工作.

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

在maven依赖中输入"bundle"是什么意思?