equinox,Eclipse探秘-第一章-Eclipse启动(2)-org.eclipse.equinox.launcher

这个包的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方法。
Tags: 

延伸阅读

最新评论

发表评论