bundle.getLocation()的可能前缀

时间:2012-04-11 14:30:14

标签: java eclipse eclipse-plugin osgi

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:2)

这些是Equinox特定的URL前缀(尽管其他OSGi框架也支持reference:前缀)。它们不是OSGi规范的一部分。来自Eclipse Runtime Options:

  

osgi.bundles       以逗号分隔的捆绑包列表,这些捆绑包在系统启动并运行后自动安装并可选择启动。每个条目的格式为:

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

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

here是一个描述“initial”和“reference”前缀的线程。