Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven OSGI捆绑与jar依赖_Maven_Jar_Dependencies_Osgi_Bundle - Fatal编程技术网

Maven OSGI捆绑与jar依赖

Maven OSGI捆绑与jar依赖,maven,jar,dependencies,osgi,bundle,Maven,Jar,Dependencies,Osgi,Bundle,我试图理解以下两者之间的区别 <dependency> <groupId>com.myspace.order</groupId> <artifactId>dal</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> com.myspace.order 达尔 1.0.0

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

    <dependency>
        <groupId>com.myspace.order</groupId>
        <artifactId>dal</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </dependency>

com.myspace.order
达尔
1.0.0-SNAPSHOT


com.myspace.order
达尔
1.0.0-SNAPSHOT
捆
dal工件本身的包装指定为bundle,如下所示:

<packaging>bundle</packaging>
bundle

现在,当我部署dal工件时,我看到它作为一个jar发布在repo中(其中包含一个清单)。在这种情况下,我对dal的依赖应该是什么。它应该是bundle类型还是jar类型?若我在做OSGI,我假设方法是将类型指定为bundle。这是正确的吗?或者,我可以在这里有一个jar依赖项吗

当您在Maven中声明依赖项时,您只能依赖于普通的Jar,而不能依赖于捆绑包,因为Maven无法识别OSGi环境限制

见这个问题:


在编译项目时,您不需要(但应该!)担心OSGi环境。。。例如,如果您试图使用您所依赖的捆绑包未导出的包,它不会抱怨

当您尝试在OSGi容器中部署捆绑包时,如果您正确声明了您对所使用的“dal”包的依赖关系,当然包括版本(通常您应该根据POM将其留给maven捆绑包插件来为您执行),只有当容器中有一个包导出正确版本(或版本范围)中所需的包时,才会解决此问题

考虑到“dal”似乎已经是一个bundle,您只需确保将您的bundle和“dal”一起部署,一切都会正常工作

然而,如果您错误地添加了对“dal”私有包的依赖项,尽管Maven会很乐意为您编译它,但当您在OSGi中抛出它时,您会遇到一个糟糕的连接异常:)

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

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


“例如,如果您尝试使用您所依赖的捆绑包未导出的包,它不会抱怨……”这是否意味着OSGI依赖关系在运行时被强制(并检测到)?我认为导出包是在编译时验证的。在OSGi容器中安装包时,依赖关系将得到解决。由于OSGi是一个动态环境,您可以随时安装一个包。。。如果bundle进入已解析状态,则可能会启动它。换句话说,安装是一种动态编译。。。如果捆绑包通过了,则可以保证在安装时满足所有导入,因此捆绑包可以开始。在您实际尝试安装之前,OSGi无法解决捆绑包依赖关系,因为这将取决于安装时可用的捆绑包集。另一方面,Maven使用普通的Java编译过程,忽略OSGi可见性规则。。。这是主要的区别。
<packaging>bundle</packaging>