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