【问题标题】:Eclipse RCP: bundle activation upon resource requestEclipse RCP:根据资源请求激活捆绑包
【发布时间】:2016-06-30 15:45:31
【问题描述】:

Eclipse-LazyStart 标头用于指定是否应在从该包访问第一个类或资源之前启动包

取自官方 Eclipse documentation.
从这句话可以推断,如果指定Eclipse-LazyStart(或Equinox 3.4+ 中的Bundle-ActivationPolicy: lazy),捆绑包将在第一类或资源请求时激活。

最初我的意思是问如何将资源文件添加到激活异常列表中,因为根据文档,异常列表仅包含类包:
Bundle-ActivationPolicy: lazy; exclude:="org.eclipse.foo1, org.eclipse.foo2"

但随后我进行了一些测试,发现在资源请求时未激活捆绑包 - 只有类请求激活捆绑包。我能够访问我的资源文件并读取其内容,而无需触发 bundle Activator.start。

所以问题是:

  • 是否根据资源请求激活捆绑包?如果不是,则说明文档具有误导性。
  • 如果正在激活,如何将非 java 文件添加到排除/包含列表中?为什么 Activator.start 没有被触发?

【问题讨论】:

    标签: eclipse eclipse-rcp rcp osgi-bundle lazy-initialization


    【解决方案1】:

    Bundle-ActivationPolicy 的实际 OSGi 规范说:

    默认情况下,从包中加载的任何类都可以触发惰性 激活,但是,资源加载不能触发激活。 惰性激活策略可以使用以下指令定义哪些类导致激活:

    • include - 必须触发激活的软件包名称列表 当从这些包中的任何一个加载类时。默认是全部 包中存在的包名称。

    • exclude - 软件包列表 类时不得触发捆绑包激活的名称 从这些包中的任何一个加载。默认是没有包名。

    (2014 年 6 月 6 日 OSGi 核心版本第 4.4.6.2 节)

    也就是说资源永远不会触发激活。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2013-06-03
      • 2014-01-12
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多