java

位置:IT落伍者 >> java >> 浏览文章

Eclipse的启动机制研究


发布日期:2019年06月16日
 
Eclipse的启动机制研究

最近我一直在研究Eclipse的架构体系下面我们就来看看Eclipse的启动机制吧

Eclipse源代码

eclipsesourceBuildsrcIncludedzip 版本 大小MB

下载地址

解压后的目录结构如下图通过执行buildbat可以编译出完整的Eclipsesdk运行包和我们网上下载的一样但是这个过程可能需要一个小时左右的时间要有耐性哦所有的插件工程目录在plugins中我们只需要导入现有工程即可把plugins下所有工程导入

下面我们就先来研究一下Eclipse最核心的部分就是RCP部分必须的插件下面我列出了Eclipse RCP需要的插件

将这些代码解压缩到一个空目录里然后导入到Source Insight的Project里

Eclipse启动过程

首先我们从Eclipse的启动过程开始分析

exe部分的引导

eclipseexe是Eclipse的启动文件是与平台相关的可执行文件它的功能比较简单主要是加载startupjar文件代码在Eclipse源代码的eclipsesourceBuildsrcIncludedpluginsorgeclipseplatformlaunchersrczip对应多个平台对于win平台你可以直接运行win目录下的buildbat文件来编译得到它(需要安装C编译器)

java代码部分的执行入口

对于Eclipse 版本来说如果在eclipse目录下没有找到startupjar则直接执行orgeclipseequinoxlauncherMainmain方法

当然我们可以在eclipse目录下定制我们自己的启动引导包startupjar现在Eclipse 好像已经不建议这样做了如果有这个包那么这个包将是java代码的执行入口你可以在命令行下运行java jar startupjar命令来启动Eclipse它的入口是relauncherMain类这个类最终执行的还是orgeclipseequinoxlauncherMainmain方法它对应的源代码在orgeclipseequinoxlauncher目录下的Mainjava关于此文件的定制详细信息请查看eclipsesourceBuildsrcIncludedpluginsorgeclipseplatformlaunchersrczip中的eclipsec的注解部分

我们从main函数往后跟蹤找到basicRun方法这个是启动的主要部分

protectedvoid basicRun(String[] args) throws Exception {SystemgetProperties()put(eclipsestartTime LongtoString(SystemcurrentTimeMillis())); //$NONNLS$commands = args;String[] passThruArgs = processCommandLine(args);if (!debug)// debug can be specified as system property as welldebug = SystemgetProperty(PROP_DEBUG) != null;setupVMProperties(); //设置VM属性processConfiguration(); //读取configuration/configini配置文件// need to ensure that getInstallLocation is called at least once to initialize the value// Do this AFTER processing the configuration to allow the configuration to set// the install locationgetInstallLocation();// locate boot plugin (may return dev mode variations)URL[] bootPath = getBootPath(bootLocation);//Set up the JNI bridge We need to know the install location to find the shared librarysetupJNI(bootPath);//ensure minimum Java version do this after JNI is set up so that we can write an error message//with exitdata if we failif (!checkVersion(SystemgetProperty(javaversion) SystemgetProperty(PROP_REQUIRED_JAVA_VERSION))) //$NONNLS$return;setSecurityPolicy(bootPath); //设置执行权限// splash handling is done here because the default case needs to know// the location of the boot plugin we are going to usehandleSplash(bootPath);beforeFwkInvocation();invokeFramework(passThruArgs bootPath); //启动Eclipse内核}

               

上一篇:介绍下Eclipse中如何debug程序?

下一篇:struts实现多图片上传