<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

        鄭重聲明:本文是個(gè)人的筆記,不一定適用閣下,不過(guò)并不介意你閱讀。

        我一直對(duì)Eclipse的架構(gòu)很感興趣,很想知道它怎樣利用OSGI框架來(lái)加載和管理各個(gè)插件(OSGI稱為Bundle),聽起來(lái)實(shí)現(xiàn)的過(guò)程不簡(jiǎn)單,但我還是決定記錄一下其中的細(xì)節(jié),所以如果我有什么理解不正確的地方,請(qǐng)?zhí)嵝盐摇?/font>

        Eclipse提供了一個(gè)本地可運(yùn)行方式來(lái)啟動(dòng)Eclipse平臺(tái),它包含兩部分:可執(zhí)行程序(eclipse.exe)和一個(gè)共享DLL文件(eclipse_1115.dll); eclipse.exe文件位于eclipse的安裝目錄下,而那個(gè)dll文件位于安裝目錄的plugins文件下的org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.* 文件夾下面.

        在Eclipse3.3以前的版本,Eclipse安裝目錄下都有一個(gè)startup.jar的文件,eclipse.exe通過(guò)執(zhí)行這個(gè)jar文件來(lái)啟動(dòng)Eclipse平臺(tái),在Eclipse 3.3及以后的版本對(duì)此進(jìn)行了重構(gòu),startup.jar文件的功能被"org.eclipse.equinox.launcher .*" 這個(gè)插件替代了,你也可以通過(guò)Javajar命令啟動(dòng)Eclipse平臺(tái):比如啟動(dòng)Eclipse 3.4.2: java -jar  plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar

        首先Eclipse先查找JVM,然后使用JNI并加載和啟動(dòng)JVM, 如果你在命令行參數(shù)中沒(méi)有指定 "-vm" 參數(shù),Eclipse會(huì)先從安裝目錄下找jvm的文件夾,如果發(fā)現(xiàn)有這樣一個(gè)文件夾,會(huì)在文件夾下搜索“jvm.dll"文件,如果找到這個(gè)文件,Eclipse將加載并啟動(dòng)JVM,如果沒(méi)有找到,會(huì)根據(jù)環(huán)境變量中指定的位置查找JVM,你也可以在命令行添加"-vm"參數(shù)或者安裝目錄下面的configuration文件夾下面的config.ini文件中指定特定的JVM的位置。

        在找到JVM并啟動(dòng)后,開始執(zhí)行org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar,這個(gè)jar文件中指定了運(yùn)行的主類:org.eclipse.equinox.launcher.Main,這個(gè)類負(fù)責(zé)初始化Eclipse的運(yùn)行環(huán)境,包括設(shè)置必要的系統(tǒng)屬性、解析和處理configuration/config.ini配置文件、加載OSGI框架的Jar文件、檢查Java版本是否符合Eclipse最低運(yùn)行要求、設(shè)置安全級(jí)別、顯示啟動(dòng)的閃屏界面、最后通過(guò)加載"org.eclipse.core.runtime.adaptor.EclipseStarter.class"并調(diào)用它的run(String[], Runnable)方法來(lái)啟動(dòng)Eclipse平臺(tái).

        EclipseStarter 位于org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar這個(gè)插件中,這個(gè)類不能被子類繼承,也不應(yīng)該被顯式實(shí)例化,這個(gè)類中提供的方法都是靜態(tài)方法。在這個(gè)類主要通過(guò)run(String[], Runnable)完成了Eclipse平臺(tái)的啟動(dòng),而在這個(gè)方法塊中的startup(String[], Runnable)負(fù)責(zé)初始化屬性和配置、注入系統(tǒng)鉤子(Hook)、創(chuàng)建OSGI框架 、注冊(cè)插件(Bundle)事件、加載基礎(chǔ)的插件、運(yùn)行OSGI框架等一系列操作啟動(dòng)Eclipse平臺(tái)。在startup方法執(zhí)行完成后開始執(zhí)行run(Object),在這個(gè)方法中會(huì)創(chuàng)建EclipseAppLauncher的實(shí)例并將其注冊(cè)到OSGI的服務(wù)系統(tǒng)中,接著調(diào)用EclipseAppLauncherstart方法啟動(dòng),讀取插件擴(kuò)展點(diǎn)信息,查找聲明了"org.eclipse.core.runtime.applications"擴(kuò)展點(diǎn)的實(shí)現(xiàn)類,調(diào)用它的Run方法就開始啟動(dòng),這基本上就是Eclipse平臺(tái)的基本操作。下面是RCP程序的類調(diào)用層次:

       如果你已經(jīng)閱讀到這里,說(shuō)明你確實(shí)很感興趣,想要通過(guò)文字來(lái)描述代碼,很不容易,我建議你還是去閱讀一下上面提到的那兩個(gè)類:org.eclipse.equinox.launcher.Mainorg.eclipse.core.runtime.adaptor.EclipseStarter它們的確設(shè)計(jì)的很精彩,很有學(xué)習(xí)的價(jià)值。


    posted on 2009-08-24 12:14 VWPOLO 閱讀(3980) 評(píng)論(3)  編輯  收藏 所屬分類: Eclispe 插件開發(fā)

    Feedback

    # re: Eclipse 啟動(dòng),從EclipseStarter開始 2009-08-24 16:08 rmn190
    一個(gè)問(wèn)題:Eclipse是用Java寫的吧, 它找JVM的過(guò)程是否用了JVM?

    有一種可能在剛啟動(dòng)的瞬間也就是沒(méi)有真正啟動(dòng)JVM前,Eclipse是通過(guò)一些本地方法來(lái)執(zhí)行的。  回復(fù)  更多評(píng)論
      

    # re: Eclipse 啟動(dòng),從EclipseStarter開始 2009-08-24 16:15 VWPOLO
    @rmn190
    在eclipse.exe中使用本地方法查找的JVM,然后進(jìn)行啟動(dòng)  回復(fù)  更多評(píng)論
      

    # re: Eclipse 啟動(dòng),從EclipseStarter開始 2009-08-25 09:14 找個(gè)美女做老婆
    Java樂(lè)園學(xué)習(xí)網(wǎng)站: http://www.javaly.cn

    有大量的學(xué)習(xí)文章和視頻教程,以及一些項(xiàng)目源碼

    Java樂(lè)園學(xué)習(xí)群: 81107233
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 三级毛片在线免费观看| 亚洲精品欧洲精品| 精品在线视频免费| 好爽好紧好大的免费视频国产| 亚洲剧情在线观看| 国产无人区码卡二卡三卡免费| 亚洲成a人不卡在线观看| 精品免费人成视频app | 13一14周岁毛片免费| 久久精品国产精品亚洲色婷婷| 免费av一区二区三区| 久久精品蜜芽亚洲国产AV| 91香蕉国产线观看免费全集| 亚洲最大黄色网站| 最近最好的中文字幕2019免费| 亚洲s码欧洲m码吹潮| 四虎最新永久免费视频| 亚洲成在人线电影天堂色| 一个人免费观看视频www| 亚洲精品国产第一综合99久久| 免费在线观看理论片| 国产一级a毛一级a看免费人娇| 亚洲一区精品中文字幕| 成人看的午夜免费毛片| 特级aa**毛片免费观看| 亚洲韩国精品无码一区二区三区 | 一本色道久久综合亚洲精品| 视频免费在线观看| 亚洲一区二区三区免费观看 | 无码日韩人妻av一区免费| 美女视频黄.免费网址| 国产AV无码专区亚洲A∨毛片| www视频在线观看免费| 特级毛片免费观看视频| 国产亚洲精品观看91在线| 免费下载成人电影| 一个人看的www免费高清| 亚洲精品电影天堂网| 亚洲人午夜射精精品日韩| 无码精品人妻一区二区三区免费看 | 污视频网站在线观看免费|