我定义了四个包:
bundle 1 : export package x version 1
bundle 2 : import package x ver [1,2] and export package y;y uses x
bundle 3 : export package x version 2
bundle 4 : import package y and also import package x version 2
使用 apache felix(可分发的二进制文件),我发现我应该在启动 bundle 3 之前手动强制不解析(或启动)bundle 1 和 bundle 2(否则会出现使用约束问题,因为 bundle 2 将使用包x version 1 and in bundle 4 将出现 package x version 1 and version 2 --> uses constraint violation).
感谢这些帖子的作者:
http://njbartlett.name/2011/02/09/uses-constraints.html
http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/
我不喜欢对我的包强加顺序,我需要将我的所有包复制到/bundle 目录中,然后安装框架实例并启动它们。
我注意到 Apache felix 按字母顺序对要安装的包进行排序(因此包 1 将首先安装然后启动)。
我尝试使用 Apache karaf,将我的包复制到/deploy 中,我发现问题消失了,所以我的问题是:
Apache Karaf(或 felix 文件安装)是否应用一种策略来强加任何启动包的顺序以避免此类问题?
最佳答案
您应该尝试使用 Karaf 功能进行此类部署。您创建一个包含一个功能的功能文件,并将所有包添加到该功能。然后 Karaf 将加载所有的 bundle 并一次解析并启动它们。因此,解析器应该能够正确解析您的所有 bundle 。
关于osgi - Apache Karaf 如何对要安装和启动的包进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418086/