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

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

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

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

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

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

        我一直對Eclipse的架構很感興趣,很想知道它怎樣利用OSGI框架來加載和管理各個插件(OSGI稱為Bundle),聽起來實現的過程不簡單,但我還是決定記錄一下其中的細節,所以如果我有什么理解不正確的地方,請提醒我。

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

        在Eclipse3.3以前的版本,Eclipse安裝目錄下都有一個startup.jar的文件,eclipse.exe通過執行這個jar文件來啟動Eclipse平臺,在Eclipse 3.3及以后的版本對此進行了重構,startup.jar文件的功能被"org.eclipse.equinox.launcher .*" 這個插件替代了,你也可以通過Javajar命令啟動Eclipse平臺:比如啟動Eclipse 3.4.2: java -jar  plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar

        首先Eclipse先查找JVM,然后使用JNI并加載和啟動JVM, 如果你在命令行參數中沒有指定 "-vm" 參數,Eclipse會先從安裝目錄下找jvm的文件夾,如果發現有這樣一個文件夾,會在文件夾下搜索“jvm.dll"文件,如果找到這個文件,Eclipse將加載并啟動JVM,如果沒有找到,會根據環境變量中指定的位置查找JVM,你也可以在命令行添加"-vm"參數或者安裝目錄下面的configuration文件夾下面的config.ini文件中指定特定的JVM的位置。

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

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

       如果你已經閱讀到這里,說明你確實很感興趣,想要通過文字來描述代碼,很不容易,我建議你還是去閱讀一下上面提到的那兩個類:org.eclipse.equinox.launcher.Mainorg.eclipse.core.runtime.adaptor.EclipseStarter它們的確設計的很精彩,很有學習的價值。


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

    Feedback

    # re: Eclipse 啟動,從EclipseStarter開始 2009-08-24 16:08 rmn190
    一個問題:Eclipse是用Java寫的吧, 它找JVM的過程是否用了JVM?

    有一種可能在剛啟動的瞬間也就是沒有真正啟動JVM前,Eclipse是通過一些本地方法來執行的。  回復  更多評論
      

    # re: Eclipse 啟動,從EclipseStarter開始 2009-08-24 16:15 VWPOLO
    @rmn190
    在eclipse.exe中使用本地方法查找的JVM,然后進行啟動  回復  更多評論
      

    # re: Eclipse 啟動,從EclipseStarter開始 2009-08-25 09:14 找個美女做老婆
    Java樂園學習網站: http://www.javaly.cn

    有大量的學習文章和視頻教程,以及一些項目源碼

    Java樂園學習群: 81107233
      回復  更多評論
      

    主站蜘蛛池模板: 国产亚洲人成网站在线观看| 亚洲av乱码一区二区三区| 特级无码毛片免费视频尤物| 国产成人精品日本亚洲18图 | 亚洲欧洲中文日韩av乱码| 免费无码一区二区三区蜜桃| 亚洲精品高清国产麻豆专区| 国产男女猛烈无遮档免费视频网站| a级片免费观看视频| 亚洲精品免费网站| 亚洲精品无码国产| 日韩高清在线免费看| 久久午夜无码免费| 国产成人亚洲精品91专区高清| 久久精品国产亚洲AV无码麻豆| 亚洲&#228;v永久无码精品天堂久久| 国产真人无码作爱视频免费| 亚洲精品一卡2卡3卡四卡乱码| 国产亚洲精品美女久久久 | 内射干少妇亚洲69XXX| 国产一区二区三区在线免费| 亚洲国产精品免费在线观看| 一级毛片试看60分钟免费播放 | 日韩免费电影网站| 未满十八私人高清免费影院| 亚洲制服在线观看| 亚洲av永久无码精品网站| 免费在线观看黄网| 在线免费观看一区二区三区| 88xx成人永久免费观看| 未满十八私人高清免费影院| 亚洲国产欧美日韩精品一区二区三区 | 啦啦啦完整版免费视频在线观看| 亚洲精品视频免费| 久久亚洲精品无码网站| 亚洲一区二区三区在线网站| 中文字幕亚洲综合久久2| 久久91亚洲人成电影网站| 亚洲一区二区高清| 凹凸精品视频分类国产品免费| 毛片a级毛片免费播放下载|