Eclipse RCP:根据资源请求进行捆绑激活

时间:2016-03-15 09:30:34

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

  

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

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

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

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

所以问题是:

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

1 个答案:

答案 0 :(得分:2)

Bundle-ActivationPolicy的实际OSGi规范说:

  

默认情况下,从bundle加载的任何类都可以触发延迟   但是,激活资源负载不得触发激活。   延迟激活策略可以使用以下指令定义哪些类导致激活:

     

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

     

•exclude - 包列表   在类中不得触发激活bundle的名称   从任何这些包加载。默认值是没有包名。

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

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