Class 在 Equinox OSGi 包缓存中提取的文件?

Class files extracted in Equinox OSGi bundle cache?

我有一个由多个自定义插件构建的 RCP 应用程序。

对于几个较低级别(但不是最低级别)的插件,所有class文件都被提取 从插件 jar 到 osgi.configuration.area 中的 org.eclipse.osgi 文件夹下的 OSGi 包缓存中。

使用该配置区域的首次启动速度很慢。随后的发布速度很快。不知道是前者是这个缓存,还是后者。

问题

详情

大多数插件不会发生这种情况。大小似乎并不重要。它不是最低级别的插件。不是包含Bundle-NativeCode的插件集。

Bundle jar 文件存储在那里。如果捆绑包的清单具有 Eclipse-BundleShape: dir,Equinox 将通过将 jar 解压缩到目录中来实现这一点。

installing/updating/uninstalling 捆绑包之后的首次启动可能比后续启动慢,因为 Equinox 必须 运行 解析器来计算捆绑包的包分辨率。这被缓存以使后续启动更快。

如果插件使用 FileLocator.toFileURL API 这可能会解压代码。 Javadoc 说:

The contents of the URL may be extracted into a cache on the file-system in order to get a file URL.

您有时可以避免调用 toFileURL,只需使用 URL.openStream 方法读取资源而无需解包。 API如 JFace ImageDescriptor.createFromURL 也不需要文件 URL.