eclipse plugin启动顺序

依赖关系

两个plugin test1和test2;
1. test1和test2没有依赖关系
因为没有显式说明是early start,所以使用lazy start,只有在真正使用到时,才会调用具体的构造函数和start方法;
test1 contructor
test1 start
test2 contructor
test2 start

2. test2依赖于test1
这个依赖分三种:
2.1 如果只是在test2的MANIFEST.MF文件中的Require-Bundle中出现;
这时两个是没有关系的;

2.2 如果在test2中的java文件中出现import test1中的包:
这时两个还是没有关系的;

2.3 在test2中使用到了test1中的类:
在使用的地方才会初始化test1;例如在test2的构造函数处使用test1中的类:
test2 contructor
test1 contructor
test1 start
test2 start

3. 相互依赖
如果出现相互依赖,运行程序的时候,会提示有错误,但是如果不管错误提示,继续执行的话,还是可以启动;
但是最好还是将相互依赖打破,因为这样不符合设计规范。

4. early starup

一般不推荐使用early startup,因为eclipse设计时就是为了快速启动,才将显示(plugin.xml)和实现(.java,.icon,
etc)分离的。
使用early startup,需要在plugin.xml文件中追加一个extension
org.eclipse.ui.startup,同事实现IStartup接口。

这样eclipse就会使用单独的进程启动该plugin。
如果有依赖的plugin,它同时将依赖的plugin初始化;
需要注意的是:如果没有实现IStartup,eclipse会报错,但是也会将plugin在单独的进程中启动。
实现了IStartup:
test2 contructor
test1 contructor
test1 start
test2 start
test2 early startup

没有实现IStartup:
test2 contructor
test1 contructor
test1 start
test2 start

!ENTRY org.eclipse.ui 4 4 2011-06-17 10:58:47.328
!MESSAGE Bad extension specification

!ENTRY test2 4 0 2011-06-17 10:58:47.359
!MESSAGE startup class must implement org.eclipse.ui.IStartup

refs:

http://www.peterfriese.de/why-you-should-be-careful-when-using-early-
startup/

https://bugs.eclipse.org/bugs/show_bug.cgi?id=91603