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

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 阅读(3957) 评论(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
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: