最近研究了一下Eclipse的启动过程,查了点资料,也有点收获。下面是搜集到的一个比较好的说明,共享下。。。java
在Eclipse启动过程当中,Eclipse.exe负责启动,也就是把startup.jar运行起来,用java –jar startup.jar是差很少的效果。web
startup.jar里只有2个类,一个是Main.java,一个是WebStartMain.java,所不一样的是后者是用于java web start的启动类。app
Main.java的任务比较简单,主要是处理System.GetProperties()和args,从这些参数里也能够看出eclipse的定制性很是强,另外一方面处理了一下启动界面(默认一启动所看到的图像,其实也能够用参数把它隐掉),它最主要的核心任务是查找到org.eclipse.osgi_3.2.1*.jar,并把它load进来后经过java的反射机制把org.eclipse.core.runtime.adaptor.EclipseStarter类运行起来。框架
接下来要说的就是EclipseStarter类的运行状况了,它位于OSGI的那个plugin中。对OSGI,要学习Eclipse必定要学习OSGI(能够从www.osgi.org查找到相关的资料)。简单来讲OSGI原本是用于设备上软件的一个开发框架,在eclipse3.1中被用来做为系统的模块化框架,eclipse有个专门的项目equinox专门用来实现osgi框架,也被成为systembundle,而全部其它的做为一个bundle被systembundle来管理。eclipse
EclipseStarter的做用就把osgi的启动类,它是经过configuration目录下的config.ini来进行配置的。它的第一步主要实例化了org.eclipse.osgi.baseadaptor.BaseAdaptor和org.eclipse.osgi.framework.internal.core.OSGi并启动,大家会看到configuration生成org.eclipse.osgi目录放置相关的bundle信息,在eclipse启动的-clean参数也就是清理这个目录。Osgi所作的工做是把equinox、runtime、update等基本的bundle定位、加载进来。ide
EclipseStarter一切就绪后就要启动ide了,它是经过org.eclipse.core.runtime.internal.adaptor. EclipseStarter启动起来的。说道这里又要说osgi,实际上这里不是直接、也不是reflection启动的,而是不一样osgi的ServiceRigistry得到后实例化后启动的(也就是在上一步load runtime bundle的时候注册上的服务)。模块化
下一步就要转战org.eclipse.core.internal.runtime.PlatformActivator了,它的做用要说也简单,把全部注册过的applications级的IExtension启动起来,这里就又主要转到org.eclipse.ui.ide_3.2.1.M20060915-1030.jar中的org.eclipse.ui.internal.ide. IDEApplication,一直到这里从开始启动咱们的ide。学习
从以上过程也能够看出,eclipse就是经过启动类把osgi框架启动起来做为内核也就是systembundle,再进行其它bundle的加载,和jboss经过启动类启动jmx微内核再加载各类MBean的机制是相似的,这也就致使若是对eclipse总体没有一个很好的了解,学习梯度仍是比较大的,常常看着看着只见树木不见森林了。ui