Eclipse啓動機制(1)

最近我一直在研究Eclipse的架構體系,下面我們就來看看Eclipse的啓動機制吧

1Eclipse源代碼       
eclipse-sourceBuild-srcIncluded-3.3.1.1.zip   
版本:3.3.1.1        大小:95.058MB
下載地址:http://download.eclipse.org/eclipse/downloads

解壓後的目錄結構如下圖,通過執行build.bat可以編譯出完整的Eclipse-sdk-3.3.1.1運行包,和我們網上下載的一樣。但是這個過程可能需要一個小時左右的時間,要有耐性哦。所有的插件工程目錄在plugins中,我們只需要導入現有工程即可把plugins下所有工程導入。

 

下面我們就先來研究一下Eclipse最核心的部分,就是RCP部分必須的插件。下面我列出了Eclipse RCP需要的插件。

 

將這些代碼解壓縮到一個空目錄裏,然後導入到Source InsightProject裏。     

二、Eclipse啓動過程

首先我們從Eclipse的啓動過程開始分析。

1exe部分的引導

eclipse.exeEclipse的啓動文件,是與平臺相關的可執行文件。它的功能比較簡單,主要是加載startup.jar文件,代碼在Eclipse源代碼的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,對應多個平臺。對於win32平臺,你可以直接運行win32目錄下的build.bat文件來編譯得到它(需要安裝C編譯器)。

2java代碼部分的執行入口

對於Eclipse 3.3.1.1版本來說,如果在eclipse目錄下沒有找到startup.jar,則直接執行org.eclipse.equinox.launcher.Main.main方法。

當然我們可以在eclipse目錄下定製我們自己的啓動引導包startup.jar,現在Eclipse 3.3.1.1好像已經不建議這樣做了。如果有這個包,那麼這個包將是java代碼的執行入口,你可以在命令行下運行java -jar startup.jar命令來啓動Eclipse。它的入口是org.eclipse.core.launcher.Main類,這個類最終執行的還是org.eclipse.equinox.launcher.Main.main方法。它對應的源代碼在org.eclipse.equinox.launcher目錄下的Main.java。關於此文件的定製詳細信息請查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的註解部分。

我們從
main函數往後跟蹤,找到basicRun方法,這個是啓動的主要部分。

    protectedvoid basicRun(String[] args) throws Exception {

        System.getProperties().put("eclipse.startTime", Long.toString(System.currentTimeMillis())); //$NON-NLS-1$

        commands = args;

        String[] passThruArgs = processCommandLine(args);

       

        if (!debug)

           // debug can be specified as system property as well

           debug = System.getProperty(PROP_DEBUG) != null;

        setupVMProperties();     //設置VM屬性

        processConfiguration();   //讀取configuration/config.ini配置文件

       

        // need to ensure that getInstallLocation is called at least once to initialize the value.

        // Do this AFTER processing the configuration to allow the configuration to set

        // the install location. 

        getInstallLocation();

        // locate boot plugin (may return -dev mode variations)

        URL[] bootPath = getBootPath(bootLocation);

        

        //Set up the JNI bridge. We need to know the install location to find the shared library

        setupJNI(bootPath);

       

        //ensure minimum Java version, do this after JNI is set up so that we can write an error message

        //with exitdata if we fail.

        if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$

            return;

       

        setSecurityPolicy(bootPath); //設置執行權限

        // splash handling is done here, because the default case needs to know

        // the location of the boot plugin we are going to use

        handleSplash(bootPath);

        beforeFwkInvocation();

        invokeFramework(passThruArgs, bootPath);    //啓動Eclipse內核

    }

 

發佈了18 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章