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方法。
2013.12.25 http://bbs.csdn.net/topics/300235814
接下来要说的就是EclipseStarter类的运行情况了,它位于OSGI的那个plugin(注:D:\Program
Files\eclipse\plugins\org.eclipse.osgi_3.2.2.R32x_v20070118.jar)中。对OSGI,要学习Eclipse一定要学习OSGI(可以从http://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整体没有一个很好的了解,学习梯度还是比较大的,经常看着看着只见树木不见森林了。
相关推荐
本文将探讨Eclipse启动过程中的关键源码,并介绍Java虚拟机(JVM)调优的相关知识。 首先,Eclipse的启动流程主要由`org.eclipse.ui.internal.Workbench`类的`startup`方法控制。在启动过程中,Eclipse会进行以下...
Eclipse ShowTime是一个专门针对这个问题的插件,它能够帮助用户详细地了解Eclipse启动过程中的各个阶段所花费的时间,从而进行有针对性的优化。 Eclipse ShowTime插件的使用方法如下: 1. 安装:首先,你需要通过...
这个插件的目的是优化Eclipse的启动过程,减少启动时间,让开发者能够更快地进入工作状态。通常,这样的插件会通过各种方式来实现这一目标,比如缓存部分数据、延迟加载非核心功能、智能管理插件加载顺序等。具体到...
在IT行业中,Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java开发领域中备受青睐。有时,我们可能需要了解...记住,理解和优化Eclipse的启动过程不仅可以提高个人工作效率,也有助于团队协作和项目管理。
【标题】"仿Eclipse启动画面"涉及到的是Java编程领域中的图形用户界面(GUI)设计,特别是关于模拟知名开发工具Eclipse的启动过程。在Java中,我们可以利用Swing库来创建这种启动画面,它通常包含一个进度条来展示...
### Eclipse启动运行速度调优详解 #### 一、引言 Eclipse作为一款广泛使用的开源集成开发环境(IDE),在软件开发领域占有举足轻重的地位。然而,随着项目复杂度的提升及功能的丰富,Eclipse的启动及运行速度往往...
- **启动失败**:若Eclipse启动过程中出现错误,可以检查Eclipse目录下的log文件来获取错误信息。例如,文章中提到的XmlParser异常可能是由于Path中存在多个Java虚拟机版本导致的。 - **性能优化**:针对Eclipse的...
所谓“Eclipse强制启动”,通常是指通过指定某些参数或配置文件的方式,绕过Eclipse启动时的一些默认检查和设置,从而达到启动的目的。这种方式主要用于解决Eclipse启动时出现的各种异常情况,如JVM配置问题、插件...
除了上述错误外,还有另一种错误日志提示,涉及到Eclipse的启动过程: ``` !SESSION 2012-11-27 20:26:37.326 ----------------------------------------------- eclipse.buildId=I20110613-1736 java.version=...
### Maven在Eclipse中的项目启动命令详解 #### 一、Maven简介 Maven是一款流行的自动化构建工具,它主要用于Java项目的构建与管理。Maven通过一个中心信息文件`pom.xml`来管理项目的构建过程、依赖关系以及其他...
在非Eclipse环境中启动OSGI应用的Demo是一个实用的技术实践,尤其对于开发者来说,了解如何在没有集成开发环境(IDE)支持的情况下运行OSGI服务至关重要。这个Demo主要展示了如何在只有Java Development Kit (JDK)的...
由于`configuration`目录被删除,Eclipse在启动过程中无法找到这些必要的配置文件,从而导致启动失败。 #### 解决方案 解决此问题的方法主要有以下几种: 1. **恢复`configuration`目录** - 如果您之前有备份过...
设定初始堆大小和最大堆大小可以有效避免JVM在启动过程中进行动态内存调整,这有助于减少不必要的资源分配和垃圾回收操作。对于内存资源有限的系统,这种方式尤为重要。 ##### 3. `-XX:PermSize=20m` 永久代是存储...
### MyEclipse与Eclipse启动优化综合指南 在软件开发领域,MyEclipse与Eclipse作为广受欢迎的集成开发环境(IDE),其高效性与性能是开发者关注的焦点。然而,由于内置了大量的插件和功能,这两款IDE在启动及运行...
这些参数在 Eclipse 的启动过程中扮演着重要的角色。 JVM 参数 * `-vmargs`:用于设置 JVM 的参数,例如堆栈大小、垃圾回收器等。 * `-vm`:指定 JVM 的类型,例如 Java HotSpot(TM) 64-Bit Server VM。 Eclipse ...
这个压缩包包含的是Tigase 5.2的完整源代码,以及与之配套的MySQL数据库,使得用户能够快速地在Eclipse开发环境中启动和运行服务器。 首先,我们来详细了解Tigase服务器的核心功能和特性: 1. **多协议支持**:...
* Tomcat服务器的启动过程 拓展阅读 * Tomcat服务器的配置文件详解 * Eclipse中部署Tomcat服务器的详细步骤 * Tomcat服务器的缓存机制详解 * 在Eclipse中添加项目路径到Tomcat服务器的配置文件中的详细步骤