最近研究了一下Eclipse的启动过程,查了点资料,也有点收获。下面是搜集到的一个比较好的说明,共享下。。。

在Eclipse启动过程中,Eclipse.exe负责启动,也就是把startup.jar运行起来,用java –jar startup.jar是差不多的效果。

startup.jar里只有2个类,一个是Main.java,一个是WebStartMain.java,所不同的是后者是用于java web start的启动类。

Main.java的任务比较简单,主要是处理System.GetProperties()和args,从这些参数里也可以看出eclipse的定制性非常强,另一方面处理了一下启动界面(默认一启动所看到的图像,其实也可以用参数把它隐掉),它最主要的核心任务是查找到org.eclipse.osgi_3.2.1*.jar,并把它load进来后通过java的反射机制把org.eclipse.core.runtime.adaptor.EclipseStarter类运行起来。

接下来要说的就是EclipseStarter类的运行情况了,它位于OSGI的那个plugin中。对OSGI,要学习Eclipse一定要学习OSGI(可以从www.osgi.org查找到相关的资料)。简单来说OSGI本来是用于设备上软件的一个开发框架,在eclipse3.1中被用来作为系统的模块化框架,eclipse有个专门的项目equinox专门用来实现osgi框架,也被成为systembundle,而所有其它的作为一个bundle被systembundle来管理。

EclipseStarter的作用就把osgi的启动类,它是通过configuration目录下的config.ini来进行配置的。它的第一步主要实例化了org.eclipse.osgi.baseadaptor.BaseAdaptor和org.eclipse.osgi.framework.internal.core.OSGi并启动,你们会看到configuration生成org.eclipse.osgi目录放置相关的bundle信息,在eclipse启动的-clean参数也就是清理这个目录。Osgi所做的工作是把equinox、runtime、update等基本的bundle定位、加载进来。

EclipseStarter一切就绪后就要启动ide了,它是通过org.eclipse.core.runtime.internal.adaptor. EclipseStarter启动起来的。说道这里又要说osgi,实际上这里不是直接、也不是reflection启动的,而是不同osgi的ServiceRigistry获得后实例化后启动的(也就是在上一步load runtime bundle的时候注册上的服务)。

下一步就要转战org.eclipse.core.internal.runtime.PlatformActivator了,它的作用要说也简单,把所有注册过的applications级的IExtension启动起来,这里就又主要转到org.eclipse.ui.ide_3.2.1.M20060915-1030.jar中的org.eclipse.ui.internal.ide. IDEApplication,一直到这里从开始启动我们的ide。

从以上过程也可以看出,eclipse就是通过启动类把osgi框架启动起来作为内核也就是systembundle,再进行其它bundle的加载,和jboss通过启动类启动jmx微内核再加载各种MBean的机制是类似的,这也就导致如果对eclipse整体没有一个很好的了解,学习梯度还是比较大的,经常看着看着只见树木不见森林了。

原文出处:

http://zjiffy.spaces.live.com/blog/cns!F2E8C1A583253A4E!135.entry

Eclipse启动分析。。的更多相关文章

  1. Eclipse启动分析

    最近研究了一下Eclipse的启动过程,查了点资料,也有点收获.下面是搜集到的一个比较好的说明,共享下... 在Eclipse启动过程中,Eclipse.exe负责启动,也就是把startup.jar ...

  2. 增加eclipse启动的Tomcat内存的

    JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 如何设置Tomcat的JVM内存大小 Tomcat本身不能直接在计算机上运行 ...

  3. eclipse启动问题

    今天在公司正上班,突然跳出来一个windows update补丁更新,然后就确认呗,结果更新完成之后, eclipse打不开了,启动报错: could not find the main class, ...

  4. tomcat出现的PermGen Space问题(bat,或者eclipse启动。)

    参考地址 http://www.blogjava.net/allen-zhe/archive/2007/12/18/168556.html 参考地址:http://javavsxiaoming.ite ...

  5. 【问题解决:启动卡死】Eclipse启动卡死的解决办法

    问题描述 Eclipse启动后卡死 问题分析 由于上一次没有正确关闭,导致在启动的时候开始 问题解决 方法1(推荐): 到<workspace>\.metadata\.plugins\or ...

  6. Eclipse源代码分析

    Eclipse源代码分析 一.概述走入Eclipse的内核,看看它到底是怎么工作的? 1.Eclipse源代码 下载地址:http://download.eclipse.org/eclipse/dow ...

  7. 通过eclipse启动tomcat设置JAVA_OPTS失败的解决方案

    clipse中配置tomcat方法: Window-->Preference-->Server-->Runtime Environment-->add-->Apache ...

  8. JVM参数调优:Eclipse启动实践

    本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...

  9. IDEA和Eclipse启动优化

    昨天对比了下IDEA和Eclipse的启动速度,发现IDEA启动真的是好慢啊!!! 电脑配置:8G win7 IDEA启动配置 -Xms1024m -Xmx1024m -Xmn500m -XX:Met ...

随机推荐

  1. jQuery EasyUI 入门简介

    对于前端开发者来说,在开发过程中应用“框架”这一工具,可以极大的缩短开发时间,提高开发效率.今天我们就开介绍一款常用的框架——jQuery EasyUI. 那什么是jQuery EasyUI呢? jQ ...

  2. 怎样将 MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...

  3. C++之new、delete 与malloc、free的异同

    在C/C++编程中常常会申请内存.而对内存的申请释放操作有两套方法: new.delete 与malloc.free.他们的使用最好是成对使用,不要去混搭---这可不是时尚界哦. 例如以下是这两组方法 ...

  4. MATLAB中的集合运算

    matlab里关于集合运算和二进制数的运算的函数 intersect:集合交集ismember :是否集合中元素setdiff :集合差集setxor :集合异或(不在交集中的元素)union :两个 ...

  5. (纪录片)鸟瞰中国 China from Above

    简介: 类型: 纪录片官方网站: natgeotv.com/uk/china-from-above制片国家/地区: 美国语言: 英语集数: 2单集片长: 44分钟IMDb链接: tt4872012 主 ...

  6. JAVA基础编程50题(4-6题)具体解释

    一.描写叙述 1.将一个正整数分解质因数.比如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完毕: (1)假设这个质数恰等于n,则说明 ...

  7. 通过javac导出Jar包

    我的目录结构d:/test/          ../ src          ../build src下面放java源文件build下面放编译好的classes 下面是我的操作,我在test目录下 ...

  8. QT 截取屏幕的实现

    QPixmap提供了两个函数 grabWidget 和 grabWindow 可以将屏幕上的窗体存成一个 QPixmap 格式的图片,很容易再将 QPixmap 存成文件.函数使用很简单,两行代码就可 ...

  9. Springmvc之接受请求参数二

    Springmvc之接受请求参数 准备工作 新建一个表单提交 请求地址: http://localhost:8080/ProjectName/user/login.do <form action ...

  10. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...