2012-04-21 55 views
2

提问here的问题显示了如何通过URL引用包中的文件,例如platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt从特定版本的包中检索文件

我想同时运行同一个bundle的两个版本,并且我检索的文件在不同的版本中会有所不同。是否可以使用版本信息引用具有上述URL方案的软件包,以便我可以获得该文件的正确版本?

如果这是不可能的,是否可以通过其他方式检索特定版本的包?

回答

2

您有几个选项。将版本附加到插件名称,用下划线分隔,应该可以工作,但我现在无法尝试它来确认该表单是否适用于平台URL处理程序。例如:platform://my.bundle_3.1/some/file.txt

如果不成功,您可以直接使用OSGi API。如果您有BundleContext,则可以使用它查找所需的确切捆绑包,然后致电bundle.getResource()以获取所需的资源。

0

不可能同时运行同一捆绑包的两个版本。 OSGi启动时有一个叫做bundle bundle的进程,它将从所有可用的bundle中选择一个版本的bundle,以便最好地满足其所有的依赖。如果你真的需要两个版本,你需要通过将版本号推入捆绑ID来伪装,在这一点上它将清楚如何区分它们。

+2

OSGi框架可以运行同一捆绑包的多个版本,尽管单个捆绑包通常只能连接到捆绑依赖关系的一个版本。 – 2012-04-21 14:51:08

+0

的确如此,这更准确。每个依赖者只观察一个版本,但不同的依赖者确实可以观察到不同的版本。 – 2012-04-21 16:05:23

+0

捆绑包导出包和包是有线的实体。可以使用相同的符号名称和相同(自上一版本以来)版本或不同版本安装任意数量的捆绑软件。 – 2012-04-23 06:56:17

1

看看BundleTracker,这使得跟踪捆绑无论版本如何都是微不足道的。一般来说,最好不要查看捆绑软件的名称或版本,而要对它们包含的资源做出反应。也就是说,搜索OSGi扩展模式。

相关问题