3

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

4

2 回答 2

5

位置几乎可以是任何东西。如果我按如下方式安装捆绑包...

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

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

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

于 2012-04-11T15:39:43.883 回答
2

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

osgi.bundles 以逗号分隔的捆绑包列表,一旦系统启动并运行,它们就会自动安装并可选择启动。每个条目的形式为:

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

start-level 指示捆绑包应该运行的 OSGi 启动级别。如果省略起始级别(>0 整数),则框架将使用捆绑包的默认起始级别。如果添加了“开始”标签,则捆绑包将在安装后标记为已启动。简单的包位置被解释为相对于框架的父目录。如果该位置不是完全限定的路径或 URL,则进行搜索以找到可用的最高版本。请注意,reference:protocol 只能用于引用 file:URL 指定的内容(例如 reference:file:/path/to/mybundle_1.0.0.jar)。如果包是目录包,则不支持使用 file: URL 而不使用 reference: (例如 file:/path/to/myDirectoryBundle_1.0.0/ 必须使用 reference:file:/path/to/myDirectoryBundle_1.0.

是一个描述“初始”和“参考”前缀的线程。

于 2012-04-11T14:40:03.760 回答