【问题标题】:Class files extracted in Equinox OSGi bundle cache?在 Equinox OSGi 包缓存中提取的类文件?
【发布时间】:2020-03-05 09:14:40
【问题描述】:

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

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

使用该配置区域的第一次启动很慢。随后的发布速度很快。我不知道是把这个缓存归咎于前者,还是把它归功于后者。

问题

  • 能否控制是否将插件的类提取到缓存中?
  • 我想要吗?

详情

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

【问题讨论】:

  • 使用 FileLocator.toFileURL 会导致提取发生。
  • @greg-449 - 乍一看,这看起来与正在缓存其类的插件一致。今天下午晚些时候我会调查的。谢谢你的线索。我永远不会发现。
  • @greg-449 - 这似乎是问题所在。如果您愿意添加答案,我会接受。

标签: java eclipse-plugin osgi eclipse-rcp equinox


【解决方案1】:

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

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

【讨论】:

  • 很高兴知道。在我的情况下,这似乎不是原因。无论如何,谢谢您提供的信息。
【解决方案2】:

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

URL 的内容可能会被提取到缓存中 文件系统以获取文件 URL。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2010-11-30
    • 2012-04-01
    • 2010-11-06
    相关资源
    最近更新 更多