启动插件名为org.eclipse.equinox.launcher.<version>,入口类org.eclipse.core.launcher.main.它是Eclipse虚拟机启动的最早的插件
main整体流程:
1.处理命令行参数
2.设置虚拟机属性
3.处理配置
4.获取安装路径
5.获取启动路径
6.加载JNI动态库
7.设置安全属性
8.处理闪屏
9.启动Eclipse核心框架
1.处理命令行参数 解析命令行参数
-showsplash 定位闪屏文件参数
-vmargs java虚拟机参数
-nl 本地语言设置 对应系统属性osgi.nl
-vm 定位java虚拟机参数
--launcher.library 外壳程序动态库路径
-launcher launcher程序所在位置
-startup startup.jar所在的位置
-name 启动程序所用的名字 对应系统属性eclipse.launcher.name
-exitdata 退出数据
-configuration 配置文件位置 对应系统属性osgi.configuration.area
-install 安装路径 对应系统属性osgi.install.area
2.设置虚拟机属性 将解析的虚拟机参数设置到系统属性中
系统属性eclipse.vm 来源于参数-vm
系统属性eclipse.vmargs 来源于参数-vmargs
系统属性eclipse.commands 来源于整个命令行
3.处理配置文件
定位配置文件config.ini算法:
1.读取系统属性osgi.configuration.area
2.如果第一步未找到则读取系统属性osgi.baseConfiguration.area
3.读取osgi.configuration.cascaded属性 如果属性值为true,表示需要级联的配置文件,则读取读取系统属性osgi.sharedConfiguration.area
4.如果第三步中未找到配置文件,则在安装路径下/configuration目录中定位
5.将配置文件中的属性合并到系统属性中
6.读取系统属性osgi.framework,其值为启动路径
8.处理闪屏 显示闪屏窗口
定位闪屏图标splash.bmp的算法
1.读取系统属性osgi.splashLocation
2.如果第一步中未找到,则读取osgi.splashPath属性.一般此属性在配置文件中指定
此步中保存了2个系统属性
org.eclipse.equinox.launcher.splash.handle 闪屏窗口的句柄
org.eclipse.equinox.launcher.splash.location 闪屏图标的位置
9.启动Eclipse核心插件 创建URL类加载器,并调用org.eclipse.core.runtime.adaptor.EcluipseStarter的run方法
其中通过系统属性osgi.parentClassLoader 或者osgi.frameworkparentClassLoader指定URL类加载器的父加载器,从而决定了程序可访问的类范围
未指定的话,父类加载器为BootStrapClassLoader.
属性值 boot 表示BootStrapClassLoader
属性值app 表示 SystemClassLoader
属性值ext 表示ExtensionClassLoader
属性值Current 表示当前类加载器