这里提出的问题显示了如何通过 URL 引用来自包的文件,例如platform:/plugin/de.vogella.rcp.plugin.filereader/files/test.txt
.
我想让同一个包的两个版本同时运行,并且我正在检索的文件在不同版本中会有所不同。是否可以使用版本信息引用具有上述 URL 方案的包,以便我可以获得正确版本的文件?
如果这不可能,是否可以通过其他方式检索特定版本的捆绑包?
你有几个选择。将版本附加到插件名称(用下划线分隔)应该可以,但我现在无法尝试确认该表单与平台 URL 处理程序一起使用。例如:platform://my.bundle_3.1/some/file.txt
。
否则,您可以直接使用 OSGi API。如果您有BundleContext
,您可以使用它来查找您想要的确切捆绑包,然后调用bundle.getResource()
以获取您想要的资源。
查看 BundleTracker,这使得无论版本如何都可以轻松跟踪捆绑包。一般来说,最好不要查看包的名称或版本,而是对它们包含的资源做出反应。也就是说,搜索 OSGi 扩展器模式。
不可能同时运行同一个包的两个版本。OSGi 启动时有一个称为捆绑解析的过程,它将从所有可用的捆绑包中选择单个版本,以便最好地满足其所有依赖项。如果您确实需要两个版本,则需要通过将版本号推入捆绑包 id 以某种方式伪造它,此时将清楚如何区分它们。