这个包的Main Class是org.eclipse.core.launcher.Main.main,在3.0版本前,一直是通过startup.jar包中这个类里启动Eclipse,3.0版本后采用了OSGi框架,OSGi的框架中Eclipse的实现是equinox项目,在3.0版本后,原来的startup.jar合并到了equinox的launcher包中。
org.eclipse.core.launcher.Main.main调用的是org.eclipse.equinox.launcher.Main.main(args),org.eclipse.equinox.launcher.Main.main方法调用Main类自身的run方法,run方法结果如下
1.启动,调用basicRun方法,启动UI界面
2.UI界面关闭后,执行setExitData方法。setExitData方法通过JNIBirdge调用保存数据。
run方法使用了Throwable捕捉异常,这样能捕捉JVM所能捕捉的异常,这是平台常用的捕捉异常方式,避免程序崩溃。在崩溃时,Eclipse通过捕捉这个异常给出提示(就是那个对话框,Eclipse不见了)


run方法调用的是basicRun是Eclipse的主要启动函数,它的主要内容包括:
1.记录启动启动时间,通过debug模式可以看到Eclipse的启动时间
2.processCommandLine:处理Command参数,并根据Command参数设置默认属性
3.setupVMProperties:将VM参数写入到System.Properties中
4.processConfiguration:加载配置信息
5.getInstallLocation:获取安装路径
6.getBootPath:获取启动路径列表
7.setupJNI:启动JNIBridge,加载dll类库
8.检查JDK版本、检查配置信息
9.setSecurityPolicy:设置安全策略
10.handleSplash:启动闪屏
11.invokeFramework:加载框架

下面对重点方法进行描述:
1.processConfiguration:处理配置信息
如果在启动时没有指定-configuration参数,将会以当前安装目录和默认的配置文件夹configuration加载配置信息,默认加载目录下的config.ini文件,以properties读入,将配置信息合并到System.getProperties()中。在config.ini中osgi.framework的指定的Jar包进行启动。
2.getInstallLocation():获取当前安装路径。它先从系统配置信息中获取安装路径,如果没有,则通过获取main类包的路径换算出安装路径(Main.class.getProtectionDomain().getCodeSource().getLocation())方式获取。
3.getBootPath:获取启动路径列表,读取osgi.framework及osgi.framework.extensions(逗号分割)。
4.setupJNI:首先获取--launcher.library的路径,并根据操作系统、架构、窗体架构等信息,加载相应的本地文件(例如:dll或so)。并使用Runtime.getRuntime().load(lib)加载本地文件。
5.setSecurityPolicy方法:对OSGi框架设置全部权限。
6.handleSplash:加载闪屏
7.invokeFramework:启动OSGi框架。设置OSGi框架的ClassLoader,如果没有指定ClassLoader,默认将boot设置为OSGi框架的ClassLoader的父类,并产生一个Equinox框架的StartupClassLoader,在启动路径列表里加载相应的类,通过该ClassLoader加载org.eclipse.core.runtime.adaptor.EclipseStarter类,并调用其run方法,将命令行参数及闪屏对象(线程)传递给run方法。

至此Eclipse的启动包中方法结束,下一节将将启动类org.eclipse.core.runtime.adaptor.EclipseStarter的run方法。

posted on 2011-09-26 11:57  黑衣魔术师  阅读(4661)  评论(0编辑  收藏  举报