最近研究了一下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