Class 在 Equinox OSGi 包缓存中提取的文件?
Class files extracted in Equinox OSGi bundle cache?
我有一个由多个自定义插件构建的 RCP 应用程序。
对于几个较低级别(但不是最低级别)的插件,所有class文件都被提取 从插件 jar 到 osgi.configuration.area 中的 org.eclipse.osgi 文件夹下的 OSGi 包缓存中。
使用该配置区域的首次启动速度很慢。随后的发布速度很快。不知道是前者是这个缓存,还是后者。
问题
- 我可以控制是否将插件的 classes 提取到缓存中吗?
- 我想要吗?
详情
大多数插件不会发生这种情况。大小似乎并不重要。它不是最低级别的插件。不是包含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.
我有一个由多个自定义插件构建的 RCP 应用程序。
对于几个较低级别(但不是最低级别)的插件,所有class文件都被提取 从插件 jar 到 osgi.configuration.area 中的 org.eclipse.osgi 文件夹下的 OSGi 包缓存中。
使用该配置区域的首次启动速度很慢。随后的发布速度很快。不知道是前者是这个缓存,还是后者。
问题
- 我可以控制是否将插件的 classes 提取到缓存中吗?
- 我想要吗?
详情
大多数插件不会发生这种情况。大小似乎并不重要。它不是最低级别的插件。不是包含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.