2012-04-11 58 views
3

我正在使用Equinox OSGi实现。当我检索一个包并询问它的位置(getLocation()方法)时,返回的字符串前缀为“initial @ reference”。 OSGi 4.3规范没有提到这个前缀。是否有另一个文件中指定了这个前缀和其他可能的前缀?bundle.getLocation()的可能前缀

回答

2

这些是Equinox特定的URL前缀(尽管引用:前缀也受到其他OSGi框架的支持)。他们不是OSGi规范的一部分。在Eclipse运行选项:

osgi.bundles 被自动安装和可选启动一次系统启动和运行包的逗号分隔的列表。每个条目的形式为:

<URL | simple bundle location>[@ [<start-level>] [":start"]] 

的启动电平表示将在哪个束应该运行在OSGi启动级别。如果省略了开始级别(> 0整数),则框架将使用该包的默认开始级别。如果添加了“开始”标签,那么该软件包在安装后将被标记为启动。简单的包位置是相对于框架的父目录而言的。如果该位置不是完全合格的路径或URL,则会执行搜索以查找可用的最高版本。请注意,reference:协议只能用于引用由文件:URL指定的内容(例如,reference:file:/path/to/mybundle_1.0.0.jar)。如果该捆绑包是一个目录捆绑包,则不支持使用文件:URL而不使用引用:(例如file:/path/to/myDirectoryBundle_1.0.0/必须使用引用:file:/path/to/myDirectoryBundle_1.0.0/ )

here是一个描述“初始”和“引用”前缀的线程。

+0

感谢您为该主题带来了一些亮点 – 2012-04-11 14:51:14

6

该位置可以几乎任何东西。如果我安装一个软件包如下...

InputStream data = ...; // open a stream from wherever 
context.installBundle("crazy location huh?", data); 

...随后此包的getLocation()方法将返回“疯狂的位置吧?”。

如果我试图调用Bundle.update()的无参数变体,那么这只会对我造成问题,因为框架无法解释位置字符串以便从该位置更新包。但我总是可以调用Bundle.update(InputStream)方法从我直接指定的数据更新包。