博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eclipse启动分析。。
阅读量:6341 次
发布时间:2019-06-22

本文共 1621 字,大约阅读时间需要 5 分钟。

最近研究了一下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(可以从查找到相关的资料)。简单来说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整体没有一个很好的了解,学习梯度还是比较大的,经常看着看着只见树木不见森林了。

原文出处:

转载于:https://www.cnblogs.com/huapox/p/3509664.html

你可能感兴趣的文章
计算一个点是否在一个区域中
查看>>
正则表达式
查看>>
淘宝面试题:有一个一亿节点的树,现在已知两个点,找这两个点的共同的祖先。...
查看>>
EntityFramework 6.x多个上下文迁移实现分布式事务
查看>>
高版本SQL备份在低版本SQL还原问题
查看>>
一键安装最新内核并开启 BBR 脚本
查看>>
C# 绘制图表(柱状图,线性图,饼状图)
查看>>
.NET中使用Redis
查看>>
PHP 页面跳转的三种方式
查看>>
Juniper总结
查看>>
屏蔽scrollview的滚动
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
Oracle 查询类似 select top 的用法
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
当当网上书店头部和尾部——JS源码
查看>>
MD5的安全性
查看>>