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 工件时,我看到它作为 jar 发布在 repo 中(其中包含清单)。在这种情况下,我对 dal 的依赖应该是什么。它应该是 bundle 还是 jar 类型?如果我在做 OSGI,我认为方法是将类型指定为 bundle。这个对吗?或者,我可以在这里有一个 jar 依赖项吗?

4

1 回答 1

13

当你在 Maven 中声明一个依赖时,你只能依赖一个普通的 Jar,而不是一个 bundle,因为 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”的含义是什么?

于 2013-02-17T22:04:17.033 回答