1. 背景信息
Equinox项目是Eclipse开源组织提供的OSGi框架的实现。Eclipse自3.0版本开始,其内核移植到OSGi框架上。通过OSGi框架强大的组件控制,交互和管理能力,再加上Eclipse插件的自有特点,Eclipse开源框架得到了跳跃式的发展。同时,OSGi规范得益于Eclipse IDE环境庞大的使用者,OSGi联盟也进入了快速发展时期。
OSGi框架在2006年之前还不为广大的开发者所知,OSGi的开源框架实现也只有ObjectWeb上的Oscar和Knopflerfish两个实现。最初的OSGi标准主要应用于J2ME和J2SE,Equinox的加入使得OSGi标准的应用领域不断扩充,目前OSGi在J2EE方面的应用也在不断的发展中。IBM Websphere Application Server从6.0版本开始其内核转向由OSGi实现。
OSGi的本质是将Java面向对象的开发转向面向组件和服务的开发。OSGi框架提供了一套完善的机制用于管理和控制组件(Bundle)、服务(Service)的生命周期,以及组件和服务在其生命周期内的交互。
本文及后续系列文章将以Equinox项目为基础,讲述如何实现基于OSGi的应用。
2. Equinox项目概述
Equinox 项目包括 OSGi R4 版本规范核心框架的实现,一系列 OSGi 标准服务 Bundle 及运行基于 OSGi 的系统的一些基础构件。用户可以直接访问该项目在 Eclipse 的网址 Equinox 获取概括性的信息。目前,关于 Equinox 的进展大部分资料及项目进展存在于 Eclipse Wiki 上。
目前, Equinox 项目包括 OSGi 核心框架的实现, OSGi 标准服务 Bundle 实现, OSGi 的服务器端( J2EE 实现)应用, Equinox 部署更新框架及一些研究方向(未成熟发布的构想如 JMX 管理,安全管理,面向方面的设计与应用等)。
2.1OSGi核心框架的实现
Equinox 的 OSGi 核心实现由三部分组成,包括:
? OSGi 核心规范的实现(org.eclipse.osgi )
该项目是 OSGi 核心框架标准规范的实现。由于 Eclipse 在 3.0 版本之前未采用 OSGi 作为系统内核,所以,为了重用 Eclipse3.0 以前核心系统的代码, Equinox 的 OSGi 实现在一定程度上显得比较繁冗。用户如果想研究开源的 OSGi 框架实现的源代码,可以从 Oscar (目前为 Apache 的 Felix 项目)或 Knopflerfish 项目着手。 ObjectWeb 上的 Oscar 项目最初实现 OSGi R2 版本框架时,整个核心的源代码不超过 40 个类文件。现在, Oscar 项目转由 Apache 维护,项目称之为 Felix ,目前已发布 1.0 版本。 Knopflerfish 也是很早实现 OSGi 的一个开源项目,该项目的网站上提供了很多关于 OSGi 编程的注意事项。
? OSGi 框架启动支持(org.eclipse.equinox.launcher )
OSGi 框架启动支持对于 Eclipse IDE 开发环境熟悉的开发用户来说并不算陌生。使用 Eclipse 以前版本的用户会发现在 Eclipse 安装目录下有一个 startup.jar 的文件,该文件是 Eclipse 开发环境的入口程序封装。 Equinox 将该 Jar 文件的实现迁移为一个独立的 OSGi Fragment 。该 Fragment 主要是帮助 Equinox 建立起运行环境,如类加载路径,运行配置参数等等。
? Equinox 启动可执行程序
Equinox 启动可执行程序即为 eclipse.exe 文件,该执行程序并不是 Eclipse 以前版本的 exe 可执行文件,而是由原来的 eclipse.exe 程序拆分而来,该执行文件的一部分功能拆分为一个共享 DLL ,放置在 OSGi 框架启动支持段项目( org.eclipse.equinox.launcher )中,与原来的 Eclipse 根目录下的 startup.jar 文件功能合并。
2.2OSGi标准服务Bundle实现
OSGi 在提出核心框架规范的同时为一些常用的服务如日志服务( LogService ),配置管理服务( Config Admin ),事件管理服务( Event Admin ), HTTP 服务( HTTP Service )等。 Equinox 提供了大部分 OSGi 标准服务的 bundle 的实现,同时,借助于 Eclipse 环境的一些自身的特点, Equinox 在实现这些 OSGi 标准服务的同时,提供了很多功能扩展服务(如 org.eclipse.equinox.common )。
Equinox 项目目前提供的 OSGi 标准服务实现如下所示:
Equinox 实现项目 |
服务名称 |
服务说明 |
org.eclipse.equinox.app |
Application Container |
该项目实现了 OSGi R4 MEG 中的应用程序容器服务 |
org.eclipse.equinox.common |
Common Utility Bundle |
由一组 Eclipse 工具类(如 IStatus , Assert , IAdaptable 等)组成的实用程序 Bundle 。该 Bundle 也可以在非 OSGi 环境中独立使用。 |
org.eclipse.equinox.device |
Device Access Service |
OSGi R4 规范中的 Device Access Service 标准服务的实现,该组件由 Prosyst 公司提供实现。 |
org.eclipse.equinox.ds |
Declarative Services |
OSGi R4 规范中的 Declarative Service 标准服务的实现,该组件由 Prosyst 公司提供实现 |
org.eclipse.equinox.event |
Event Admin Service |
OSGi R4 规范中的事件管理服务的实现。 |
org.eclipse.equinox.http |
HTTP Service |
OSGi R4 规范中的 HTTP 服务实现 |
org.eclipse.equinox.log |
Log Service |
OSGi R4 规范中的日志服务实现 |
org.eclipse.equinox.metatype |
Metatype Service |
OSGi R4 规范中的 Metatype 服务的实现 |
org.eclipse.equinox.preferences |
Preferences Service |
OSGi R4 规范中的 Preferences 服务的实现 |
org.eclipse.equinox.registry |
Extension Registry |
Equinox 提供的 Ecipse 扩展点( extension point )注册表服务 |
org.eclipse.equinox.supplement |
Supplemental Bundle/JAR |
Equinox 提供的一组 Equinox 实现所使用的类型库 |
org.eclipse.equinox.useradmin |
User Admin Service |
OSGi R4 规范中的用户管理服务实现 |
org.eclipse.equinox.wireadmin |
Wire Admin Service |
OSGi R4 规范中的服务通信拓扑管理服务 |
org.eclipse.osgi.services |
OSGi Services API |
OSGi R4 规范中的服务接口定义,该 Bundle 由 OSGi 联盟定义的服务 API 接口组成 |
org.eclipse.osgi.util |
OSGi Utilities |
OSGi R4 规范中的工具类接口及接口实现 Bundle |
2.3OSGi的服务器端(J2EE实现)应用
Equinox
实现了
OSGi
在
J2ME
、
J2SE
方面的应用的同时,也推动了
OSGi
在
J2EE
方面的应用。
Equinox
提供了一组基础的
Bundle
,使得使用
JSP
、
Servlet
和
Struts
等
J2EE
技术的
Web
应用项目可以运行于
Equinox OSGi
环境中。同样的,
Equinox
通过一组
Bundle
,可以将
Equinox OSGi
应用嵌入到现有的
Web
服务器(如
Tomcat
,
Jetty
等)和应用服务器(如
Websphere
,
Weblogic
等)中。
下面是
Equinox
在
J2EE
应用方面的一组
Bundle
列表:
Equinox J2EE 实现项目 |
服务名称 |
服务说明 |
org.eclipse.equinox.http |
HTTP service |
该 Bundle 是 OSGi R4 规范中的 HTTP 服务的标准实现。目前该实现只支持 Servlet 2.3 。 |
org.eclipse.equinox.http.registry |
HTTP registry |
该 Bundle 支持使用 Eclipse 的扩展注册表注册 servlet ,文件资源和 JSP 而不是使用 OSGi 中的代码注册机制。 |
org.eclipse.equinox.servletbridge |
Servlet Bridge |
该 Bundle 提供一个底层的 Hook servlet ,使得 Equinox 可以嵌入到现有的应用服务器中运行。该 Bundle 中的 servlet 启动嵌入的 Equinox 并使其可以处理来自底层应用服务器接收的 HTTP 请求。 |
org.eclipse.equinox.http.servlet |
HTTP Servlet |
该 Bundle 为在 Equinox 中发布其他 servlet 处理引擎(如传统的应用服务器)为 OSGi HTTP 服务提供支持 。 |
org.eclipse.equinox.http.servletbridge |
HTTP ServletBridge |
该 Bundle 为底层的应用服务器(如 Tomcat , Jetty 等)发布为 OSGi HTTP 服务提供一层封装。封装的应用服务器必须安装该 servlet bridge 。 |
javax.servlet |
Servlet API |
Servlet 规范标准接口 API 的 Bundle 封装。 |
javax.servlet.jsp |
Servlet JSP API |
Servlet JSP API 接口的 Bundle 封装。 |
org.mortbay.jetty |
Jetty |
嵌入式 Jetty 实现的 Bundle 封装。目前 Equinox 提供的 Jetty 实现版本为 5.x 。 |
org.eclipse.equinox.http.jetty |
HTTP Jetty |
该 Bundle 封装 Jetty 为标准的 OSGI HTTP 服务。目前该服务只能使用 Jetty 5.x 版本;如果用户希望使用 Jetty 6.x 版本的 Bundle 封装,可以参考 ops4j 上的实现。 |
关于如何在
Equinox
环境中部署
Web
应用(
JSP
、
Servlet
和
Struts
等),请参考
Equinox
网站相关资料。我会在本系列后续文档中给出详细介绍。
2.4Equinox部署更新框架(Provisioning)
Eclipse
提供为插件的分组,更新及远程维护提供了一套完善的机制。用户可以通过远程更新站点安装或升级所需功能的插件。为了适应
OSGi
环境的特点,
Equinox
项目组为基于
OSGi
的系统的部署更新提供了一套全新的框架,称为
“
equinox p2
”。目前该框架还在第一个发布版本的最后阶段,该功能预计将在
Eclipse 3.4
版本中集成发布。
2.5Equinox的最新研究方向
?
资源管理(Resource Monitoring
)
该方向致力于为基于
OSGi
的系统提供一个轻量级的资源监控管理基础框架,该框架基于
JMX
技术。目前该研究方向已经提供了一套可供展示的基本实现。
?
安全管理
该方向致力于将
Java
安全机制(
JCA/JAAS
框架)集成到
Eclipse
中。为
Eclipse/Equinox
环境提供诸如消息摘要,数字签名,密钥存储,证书存储等基础安全机制。此外,该方向还为
Eclipse
提供
JAVA
包签名,
Bundle
加载时的签名校验,代码权限等机制的实现。
?
面向方面的开发
该方向致力于解决在
OSGi
环境中面向方面编程的一些技术问题,如加载编排和模块化等。
3. 结论与参考
本文简要概述了
Equinox
在
OSGi
规范方面的实现以及它为
OSGi
在其他领域的应用所做的研究。后续文档中,我们将会将上述各个方面展开进行详细的描述。
OSGi
的广泛应用将大大推动
JAVA
由面向对象的编程向面向组件和服务的编程转变。
目前,
JCP
组织提出
JSR-291
将
OSGi
纳入
JAVA
标准规范。如果该
JSR
最终被集成到
J2SE
实现中,开发人员可以在
JAVA
基础编程中直接采用
OSGi
提供动态的模块化应用。
Equinox
项目源代码的位置位于
CVS
服务器上:
:pserver:anonymous:dev.eclipse.org/cvsroot/eclipse
路径下,以
org.eclipse.equinox.*
命名的项目以及该位置下的
equinox-incubator
目录下。
4. 插曲
SUN
公司提出了一个类似于
OSGi
的模块化系统规范称之为“
HK2
”。
HK2
的全称为“
Hundred Kilobytes Kernel
”,包括
Modules Subsytem
和
Component Model
两部分。据称,该内核将在
JDK 7
中集成,同时,
SUN
在其开源的
GlassFish J2EE
应用服务器项目
V3
版本中将
HK2
作为其系统内核实现。
1、概述
在上文中讲到,Equinox包括核心框架,标准服务实现,面向J2EE的应用,新的部署更新框架及一些其他的研究方向。本文主要针对Equinox实现的OSGi核心框架及Equinox OSGi运行环境的搭建过程进行详细讲述。
用户在阅读下文时,应具有基本的Java编程及打包的概念并对OSGi标准的构成有一定的了解,理解OSGi框架及Bundle的概念。
2、OSGi核心框架
从OSGi核心框架示意图可以看到,OSGi核心框架主要包括模块层,生命周期层,服务层及安全层组成。完整的OSGi核心框架实现,还包括包管理服务 (Package Admin)、启动层次服务(Start Level)、条件许可管理(Conditional Permission Admin)、权限管理(Permission Admin)及URL处理服务(URL Handlers)等框架服务。
关于OSGi核心框架的详细介绍请参考OSGi标准规范。
3、Equinox的OSGi Framework实现
Equinox的OSGi框架实现包含在org.eclipse.osgi插 件项目中。在发布的Eclipse环境中,用户可以在Eclipse安装目录下的plugins目录中找到该插件。该插件一般 以"org.eclipse.osgi_<版本号>.jar"的JAR文件形式打包。由于是从Eclipse3.0以前版本迁移到OSGi核 心的缘故,目前的Equinox OSGi 实现中包含的代码非常繁杂。
在org.eclipse.osgi项目源代码中用户可以看到除了OSGi接口及框架实现外,还包括adaptor接口及默认的 adaptor(defaultAdaptor),eclipse adaptor(eclipseAdaptor)实现,控制台实现(console),附加服务扩展(supplement),Bundle组件解析 (resolver)和Bundle JAR文件校验等功能。
在实际使用中,用户使用该Jar文件即可将OSGi框架运行起来(参考下文OSGi运行环境的搭建)。作为一个产品级的应用,往往存在很多系统级的参数可 供用户进行配置以调整系统的运行行为而满足不同环境的要求。同样,Equinox运行环境也提供了大量的运行参数以供用户选择配置。配置Equinox运 行环境参数的方式主要有两种,一种是使用JVM环境变量;另一种方式是使用Equinox的配置文件(config.ini)。
用户在获取到org.eclipse.osgi_<版本号>.jar文件后,可以尝试以命令行的方式启动该Jar文件。该Jar文件的入库主类是:org.eclipse.core.runtime.adaptor.EclipseStarter。
java -jar org.eclipse.osgi_3.3.1.R33x_v20070828.jar
用户会发现该程序执行后立即退出,控制台上没有任何输出。这是因为不存在拥有可持续运行的代码功能,框架启动后即退出主线程。下文中,我们会给出OSGi运行环境搭建的详细过程。
4、搭建Equinox OSGi运行环境
4.1 原始的OSGi环境
从Eclipse官方网站下载Equinox OSGi框架。将其下载到c:/equinox目录中。本文中使用的Equinox版本为3.3.1。直接从命令行运行该jar文件时程序执行后会立即退出,为了更好的了解Equinox OSGi框架的特点,我们在运行时添加JVM参数"osgi.console"。如下图所示:
执行"java -Dosgi.console -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar" 后,系统给出"osgi>"命令输入提示。输入"ss"命令后回车,用户可以看到上图所示"Framework is launched."的信息。同时,下方显式了系统启动的Bundle列表,id列为该Bundle在OSGi运行环境中的唯一运行标识,State列为 该Bundle当前的状态,Bundle列显示了该Bundle组件的SymbolicName。
此时,OSGi框架已经处于运行状态。
Equinox OSGi Console提供了很多命令用于与OSGi框架交互,用户可以输入任何非OSGi Console的内部命令字符,控制太将显示Equinox Console提供的所有命令。如下下图所示:
执行"services"命令,用户可以看到当前OSGi框架中发布的所有的服务信息。
4.2 以运行参数方式向OSGi环境中部署Bundle
下载Equinox SDK,将plugins目录下的org.eclipse.osgi.services_3.1.200.v20070605.jar文件拷贝到C:/equinox目录下。修改命令行运行参数如下:
java -Dosgi.console -Dosgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar
执行该命令,系统运行结果如下图所示:
从运行结果可以看出,JVM参 数"-Dosgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar"将 org.eclipse.osgi.services组件部署到了OSGi运行环境中。此时,该组件的状态为"RESOLVED",即该组件被框架解析但 没有启动。如果用户希望组件在加载的同时启动该组件,可以修改上述参数为:
[email protected]:start。
"@2"指明该组件的启动级别,":"后的"start"标明该组件在加载后启动。按修改后的参数重新执行命令输出结果如下图所示:
从上图可以看出,部署的org.eclipse.osgi.services组件在加载后被OSGi框架启动,其状态显示为"ACTIVE"。
4.3以配置文件方式向OSGi环境中部署Bundle
从上述部署Bundle的方式看出,当部署多个Bundle时,使用JVM参数配置方式是不可取的。Equinox OSGi支持从配置文件中读取加载的Bundle,下面我们演示如何使用配置文件部署多个Bundle。
将Equinox SDK中plugins目录下的org.eclipse.osgi.util_3.1.200.v20070605.jar文件拷贝到C:/equinox目录下。
Equinox OSGi提供了环境变量"osgi.configuration.area",该变量指明了配置文件config.ini的存储路径。下面我们在C:/equinox目录下添加config.ini文件,并在该文件中添加如下内容:
[email protected]:start, org.eclipse.osgi.util_3.1.200.v20070605.jar
修改OSGi框架启动命令行为:
java -Dosgi.console -Dosgi.configuration.area=. -jar org.eclipse.osgi_3.3.1_R33x_v20070828.jar
执行上述命令后的输出结果如下图所示:
5、使用Eclipse Launcher启动Equinox OSGi
熟悉Eclipse IDE环境的用户会注意到3.2版本(包括3.2)以前Eclipse安装目录下存在eclipse.exe和startup.jar两个文件,用于启动 Eclipse运行环境。从3.3版本开始,Equinox将startup.jar拆分为两个不同的Bundle(Fragment)放置在了 plugins目录下。用户可以从Equinox站点下载Launcher。下载后的3.3.1发布版本的Launcher包括下面两个组件:
org.eclipse.equinox.launcher_1.0.1.R33x_v20070828.jar
org.eclipse.equinox.launcher.win32.win32.x86_1.0.1.R33x_v20070828 [目录]
在进行下述操作之前,我们需要调整C:/equinox的目录结构,在该目录下添加"configuration"和"plugins"两个目录,将所有 的Bundle组件(包括目录)转移到plugins目录下;将config.ini文件转移到configuration目录下,将Launcher包 中的"eclipse.exe"文件拷贝到C:/equinox目录下。此时的目录结构如下图所示:
plugins目录下的内容如下图所示:
修改命令行OSGi框架启动命令为:
eclipse.exe -console -noexit
执行该命令后,在弹出的控制台中输入"ss"命令,输出结果如下:
5.1使用eclipse.ini文件
除了从命令行传入eclipse.exe使用的运行参数外,用户也可以配置与eclipse.exe的文件同名的ini文件存放eclipse.exe运行所需要的参数。用户应将该ini文件放置在eclipse.exe所在的文件目录下。
我们在C:/equinox目录下添加eclipse.ini文件,在该文件中添加如下内容:
-console
-noexit
直接点击eclipse.exe程序图标启动Equinox OSGi运行环境。程序运行结果如下图所示:
至此,Equinox OSGi完整的运行环境已经搭建完成。如果用户希望将新的Bundle发布到该环境中,只需要修改configuration目录下config.ini文件,将新的bundle添加到osgi.bundles参数下。
6、常见问题
用户在上述操作步骤中,会发现在configuration目录下生成一些错误日志文件,如果用户发现日志中出现以下内容:
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:72)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
用户可以在config.ini文件中添加如下配置:
eclipse.ignoreApp=true
7、小结
在上文中,我们详细介绍了Equinox OSGi环境组成及其搭建过程。在下一篇文档中,我们会对Equinox OSGi的运行参数做详细的介绍,同时提供一种方式使得OSGi框架能够自动发现部署的OSGi bundle而不用频繁修改配置文件
1、概述
上文我们对Equinox OSGi运行环境的组成及搭建过程做了详细讲述。本文主要对Equinox OSGi运行环境的可配置参数及其作用加以介绍,从而使用户在实际使用过程中可以对Equinox运行环境更好地进行控制。
Equinox项目沿袭Eclipse的特点,具有高度的可配置性。用户可以通过命令行参数或系统属性参数(JVM属性参数)两种方式对Equinox OSGi运行环境进行设定。命令行参数可以看作是系统属性参数的简化方式,Equinox中提供的很多系统属性参数可能不具有对应的命令行快捷设定。
2、Equinox配置参数详解
Equinox配置的参数在实际使用中可以通过以下三种方式:
- 在命令行中,使用Java虚拟机参数-D作为系统属性来设定,如:-Declipse.ignoreApp=true;
- 在配置文件config.ini文件中进行配置,如:osgi.framework=plugins/org.eclipse.osgi_<版本号>.jar
- 在Eclipse Launcher的配置文件.ini文件中进行配置。在此配置文件中用户需要使用命令行参数而不是系统属性的格式。如:-console。用户在发布 Equinox或RCP应用时可以设定启动程序(Eclipse Launcher)的名称和图标,如将启动程序改为:MyApp.exe,则对应的启动配置文件应命名为:MyApp.ini。
下表列举了Equinox3.3版本主要的配置参数。该列表包括系统参数,用于JVM属性配置或config.ini文件配置;命令行参数(如果有)用于.ini文件配置;参数的简要说明描述该参数的用途。
说明:
- 表中所列参数来自于Eclipse3.3帮助文档,关于参数的解释可能不够准确,请用户参考Eclipse帮助获取详细信息。
- 表中所列参数严格说来仅部分用于Equinox OSGi,全部适用于Eclipse。在下述说明中将不区分Equinox和Eclipse。
系统参数 | 命令行参数 | 参数说明 |
eclipse.activateRuntimePlugins | 用于控制运行时(Runtime)插件的激活。如果RCP应用程序不需要使用运行时插件提供的服务,可以将该属性值设定为false,从而避免在系统启动时激活运行时插件。 | |
eclipse.allowAppRelaunch | 如果值为true,当当前运行的应用程序Application退出时,Equinox系统主线程会一直等待该应用的另 一个应用被启动。如果停止system.bundle即Bundle ID值为0的Bundle,则会强制Equinox主线程停止等待另一个应用启动。该参数的默认值为false。 | |
eclipse.application | -application | 该Equinox系统所启动的应用程序的标识符。该参数值会覆盖eclipse.product系统属性中定义的应用程序。 |
eclipse.application.launchDefault | 当系统启动时,该属性用于自动启动默认的Application应用。默认的应用通过 eclipse.application或eclipse.product系统属性设定。该属性的默认值为"true"。如果该属性值设为false,当 系统启动时不会自动启动默认的application,系统主线程会持续等待,直至一个application通过应用描述符服务 (application descriptor service)启动。 | |
eclipse.application.registerDescriptors | 该属性控制所有安装的application是否注册相应的应用描述符服务。该属性的默认值为false。如果设定为 false,只有默认的application在服务注册表中具有相应的应用描述符服务;如果设定为true,所有安装的application在 OSGi服务注册表中都具有相应的应用描述符服务注册。 | |
eclipse.commands | 在启动Equinox系统时,使用该属性参数将用回车换行方式分隔的命令行参数列表传递给系统。 | |
eclipse.consoleLog | 如果该属性参数设定且值为true,则所有的日志输出都会传送到Java的System.out。该属性参数可以和-debug参数结合用于调试。 | |
eclipse.debug.startupTime |
该属性用于设定系统运行时Java虚拟机启动的时间(单位为毫秒) |
|
eclipse.ee.install.verify | 如果该属性值设定为true,在Bundle组件安装时,OSGi框架会检查框架运行所需要的运行环境。该参数默认值为false。 | |
eclipse.exitOnError | 该参数设定为true时,如果系统在运行时遇到无法处理的错误,则系统会退出。该参数默认值为true。 | |
eclipse.ignoreApp | 该参数设定为true时,系统主线程将不启动默认的application,同时停止并退出系统进程。该属性参数的默认值为false。 该参数不同于"eclipse.application.launchDefault",系统主线程不会等待任何的应用描述符服务启动。 |
|
eclipse.log.backup.max | 该参数用于设定允许备份的日志文件的最大数。如果备份的日志文件的数量达到该参数的设定值,则最早的日志文件将被删除。该参数的默认值为10,如果用户设定值小于或等于0,则系统启用默认值。 | |
eclipse.log.size.max | 每个日志文件的最大允许文件大小(单位:KB),该参数的默认值为“1000”。当日志文件达到允许的最大值时,日志文件会循环写入。如果该参数值被设定为0或负值,Equinox系统会使用默认值。 | |
eclipse.noExtensionMunging | 如果该参数值为 "true",则遗留的注册扩展将会保留。默认情况下,这些扩展会更新为Eclipse3.0中的新的扩展点。 | |
eclipse.noLazyRegistryCacheLoading {-noLazyRegistryCacheLoading} |
如果该参数值为"true",平台的插件注册表缓存加载优化将不被激活。默认情况下,配置项在需要的时候会从注册表缓存(如果存在)中加载,以提升性能。该参数如果值为true,系统启动时会强制加载所有注册表缓存信息。 | |
eclipse.noRegistryCache | -noRegistryCache | 如果该参数值为"true",将不使用内部扩展注册缓存。 |
eclipse.pluginCustomization {-pluginCustomization} |
保存默认插件配置的属性文件的文件路径。该属性文件中的配置项会覆盖主配置中的插件属性。如果该参数值为相对路径,则系统会认为路径相对于当前eclipse工作目录。 | |
eclipse.product | -product | 运行的产品标识。该参数控制各种产品定义信息和产品使用的application |
eclipse.service.jobs | 该参数控制org.eclipse.core.jobs插件是否注册为OSGi服务,如果值为"false"则不注册为OSGi服务 | |
eclipse.service.pref | 该参数控制org.eclipse.equinox.preferences插件是否注册为OSGi服务,如果值为"false"则不注册为OSGi服务 | |
eclipse.startTime | 该参数在Equinox启动时设定。该参数的值为System.currentTimeMillis()方法返回值的字符串表示。用户不需要设定该参数 | |
eclipse.stateSaveDelayInterval | 该参数为系统状态变更请求的序列化延迟间隔,单位毫秒,默认值为30000ms。该参数用于阻止系统管理操作(如安装Bundle组件)过程中产生的大量的磁盘写操作。 | |
eclipse.vm | -vm | 该参数指向系统启动所需的Java执行程序(JRE)的路径。如果不指定此项,则 JRE 位于jre(它与Eclipse.exe 可执行文件位于同一目录)。此信息用于构造系统重启使用的命令行。 |
eclipse.vmargs | -vmargs | 该参数用于配置系统启动所需的Java虚拟机参数。此信息用于构造系统重启使用的命令行。 |
osgi.adaptor | OSGi框架启动使用的框架适配(framework adaptor)的类名称 | |
osgi.arch | -arch | 定义 Eclipse 平台在其上运行的处理器体系结构。Eclipse 平台通常使用 Javaos.arch属性的常用值来计算最佳设置。如果在此处指定该项,则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getOSArch() 用于插件。示例值有:“x86”、“sparc”、“PA-RISC”和“ppc”。 |
osgi.baseConfiguration.area | 当osgi.configuration.area参数未指定时,该参数用于指定基本的配置信息。 | |
osgi.bundlefile.limit | 该参数用于限定框架保持打开的Jar文件的数量。该参数允许的最小值为10,默认最大值不受限定。 | |
osgi.bundles |
以逗号分隔的bundle列表。该列表中的bundle在系统启动运行时,会自动安装并根据设定启动(可选)。每一个Bundle配置形式遵循下面的规范: [@ [] [":start"]] 如果忽略start-level (>0的整数)被忽略,则将该Bundle设定为默认的启动等级。如果"start"标记被设定,则该Bundle在安装后框架会启动该Bundle。"Simple bundle location"被解释为相对于框架所作路径的上一级目录。"start-level"标明该Bundle应该在哪一OSGi启动等级运行该Bundle,如果。"start-level"未被设定,则系统会自动为Bundle配置适当的默认启动级别。 |
|
osgi.bundles.defaultStartLevel | 系统安装的所有的Bundle的启动级别。用户可以在osgi.bundles配置中为某一Bundle指定特定的启动等级。如果未设定Bundle的启动等级,则Bundle的启动等级为该参数设定值。该参数默认值为4。 | |
osgi.compatibility.bootdelegation | 如果该参数值为"true",当一个类或资源查找不到时,类加载器会启动父类加载器进行最后的查找。该参数的默认值为"true" | |
osgi.compatibility.errorOnFailedStart | Bundle组件可以通过Bundle清单属性"Eclipse-LazyStart"或"Bundle- ActivationPolicy"标记自身的延迟激活策略。自OSGi R4.1规范开始,如果一个设定了延迟激活策略的Bundle启动失败,从该Bundle进行类加载必须仍然成功。在OSGi R4.1之前,Eclipse定义的延迟激活策略允许启动失败的Bundle抛出类加载异常。如果该属性设定为"true",那么在启动失败的 Bundle中加载类时将导致类加载错误;否则,仍然允许从启动失败的Bundle中加载类。 该参数的默认值为"true" |
|
osgi.compatibility. eagerStart.LazyActivation |
OSGi R4.1规范强制要求所有的Bundle,包括设定了延迟激活策略的Bundle,在允许激活前必须被标记为启动状态。规范添加了一个新方法Bundle.start(options)使得延迟激活的Bundle可以按照设定的延迟激活策略启动。 如 果osgi.compatibility.eagerStart.LazyActivation设定为"true",所有设定了延迟激活策略的组件会被自 动标记为激活状态;否则,标记了延迟激活策略的组件必须通过Bundle.start(options)方法来启动。 该参数的默认值为"true"。 |
|
osgi.checkConfiguration | 如果该参数值为"true",系统会检查配置缓存的时间戳以保证缓存内容反映了安装的Bundle的最新配置。该参数默认值为"false"。 | |
osgi.classloader.singleThreadLoads | 如果该参数值为"true",那么同一时间只能有一个线程允许加载类。默认值为"false"。该参数用于屏蔽可能引发死锁的虚拟机Bug。 | |
osgi.clean | 如果该参数值为"true",系统在启动时,会清除OSGi框架及Eclipse运行时缓存的任何数据。该参数会清除Bundle依赖缓存和eclipse扩展注册缓存。适用该参数可以强制eclipse重新初始化上述缓存。 | |
osgi.configuration.cascaded | 如果该参数设定为"true",该配置会级联到父配置。父配置通过osgi.sharedConfiguration.area参数设定。 | |
osgi.configuration.area | -configuration | 系统配置(默认为config.ini)的存储路径。 |
osgi.configuration.area.default | 系统配置(默认为config.ini)的默认存储路径。该参数值只有在参数"osgi.configuration.area "未设定时适用。 | |
osgi.console | -console [port] | 如果该参数设定为一个非空值,系统会启用OSGi控制台。如果该参数的值是一个适当的整数,系统会将该值作为控制台监听用户输入的端口,同时也作为控制台的输出端口。 |
osgi.console.class | 该参数用于设定运行的控制台实现的类名称。 | |
osgi.console.encoding | 该参数用于设定控制台输入与输出信息的编码方式。如果该参数未设定,系统默认使用虚拟机file.encoding属性的值,如果file.encoding属性未设定,则默认使用iso8859-1作为编码方式。 | |
osgi.contextClassLoaderParent |
OSGi框架使用的上下文类加载器的父类加载器类型,有效的类型包括:
|
|
osgi.debug | -debug | 将平台置于调试方式,并从给定位置处的文件装入调试选项(如果指定的话)。此文件指示哪些调试点可用于插件以及是否已启用它们。如果未给出文件位置,则平台在启动 eclipse 的目录中查找称为“.options”的文件。URL 和文件系统路径都可作为文件位置。 |
osgi.dev | -dev | 将平台置于开发方式。将可选类路径条目(用逗号分隔的列表)添加至每个插件的运行时类路径。例如,当工作空间包含要开发的插件时,指定-dev bin会为每个插件项目的名为bin的目录添加类路径条目,允许在其中存储最新生成的类文件。除去了冗余或不存在的类路径条目。 |
osgi.filepermissions.command |
该参数设定一个可选的操作系统命令用于设定抽取的本机代码的文件操作权限。在一些操作系统中,某些本机代码需要设定为可执行,可以使用此参数设定执行授权的命令。如UNIX类型的操作系统,用户可以使用如下代码设定某一可执行文件具有执行权限: osgi.filepermissions.command="chmod +rx [fullpath]" 此处[fullpath]用于指代实际的文件路径。 |
|
osgi.framework | -framework | OSGi框架实现的位置(URL格式)。如osgi.framework=file://d:/proxy/org.eclipse.osgi.jar |
osgi.frameworkClassPath | 该参数可以为OSGi框架指定一个以逗号分隔的类路径列表。如果设定类路径为相对路径,则系统认为相对于OSGi框架的所在路径(参考osgi.framework)。 | |
osgi.framework.extensions |
该参数用于指定框架扩展的Bundle列表。每一个Bundle遵循如下规则: 系统会在org.eclipse.osgi Bundle的父目录中查找Simple bundle location。框架扩展可以用来使用不同的框架适配来运行Eclipse。框架扩展可用包含一个eclipse.properties文件来设定系统属性。例如,一个提供了自定义框架适配实现的框架扩展可以使用osgi.adaptor属性参数设定其框架适配实现的类名称。 |
|
osgi.framework.shape | 该属性设定Eclipse OSGi框架实现的形式。Eclipse启动时自动设定该属性,不需要用户配置。属性值"jar"表明框架实现包含在一个单一的Jar文件中;属性值"folder"表明框架实现包含在一个文件目录中。 | |
osgi.framework.library.extensions | 用逗号分隔的附加扩展类库文件查找列表。如果未设定此参数,则系统只使用 System.mapLibraryName(String)方法返回的值作为查找路径。有些特定的系统允许一种以上的类库扩展,如AIX系统允许.a 和.so类库文件扩展,而System.mapLibraryName(String)方法只返回.a的类库文件扩展。 | |
osgiframeworkParentClassloader |
OSGi框架类加载器的父类加载器类型,可用的类型包括:
|
|
osgi.framework.useSystemProperties | 控制将框架属性设定为全局系统属性还是由每一个框架实例自行持有。默认情况(值为true)下框架属性也配置为系统属性。 该属性在同一个Java虚拟机中运行多个OSGi框架实例时,可让每个实例控制自己独立的属性配置。 |
|
osgi.hook.configurators | 用逗号分隔的hook配置列表。如果设定了该配置参数,那么系统将只使用该列表中指定的hook配置。所有在hookconfigurators.properties文件中配置的hook将被忽略。 | |
osgi.hook.configurators.include | 用逗号分隔的附加hook配置列表。该参数可用于配置可选的hook配置,如果参数"osgi.hook.configurators"被设定,则该参数的值将被忽略。 | |
osgi.hook.configurators.exclude | 用逗号分隔的被排除的hook配置的列表。该参数可用于排除hookconfigurators.properties配置文件中配置的hook。如果参数"osgi.hook.configurators"被设定,则该参数的值将被忽略。 | |
osgi.install.area | -install | 平台的安装位置。该位置指明了Eclipse插件的位置,一般为eclipse目录下的plugins目录。 |
osgi.instance.area | -data | 运行系统实例数据存储区。插件使用此位置存储其运行数据。默认情况下,用户可以在此参数下的.metadata目录及子目录中找到这些数据。该参数也是资源插件用来存储项目的位置,即工作空间Workspace。 |
osgi.instance.area.default | 运行系统默认的实例数据存储区。系统中的插件使用此位置存储各自的运行数据。例如,资源插件使用该位置存储所有项目(即工作空间workspace)。该参数仅在配置参数"osgi.instance.area"未设定时启用。 | |
osgi.locking | 运行平台所使用的锁类型。可用的类型包括:"java.io", "java.nio", 和 "none"。默认值为"java.nio"。如果JRE不支持"java.nio",那么"java.io"将作为默认值。 | |
osgi.manifest.cache | Bundle清单的生成和查找路径。Bundle清单缓存位置可以独立设定,默认为系统配置存储区。 | |
osgi.nl | -nl | 定义 Eclipse 平台在其上运行的语言环境的名称。Eclipse 平台通常自动计算最佳设置。如果在此处指定该项,则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getNL() 用于插件。示例值有:“en_US”和“fr_FR_EURO”。 |
osgi.nl.user | 当用户在命令行添加-nl参数时,该属性设定locale的名称。 | |
osgi.noShutdown | -noExit | 如果值为"true",当eclipse应用程序停止时,Java虚拟机并不退出。这在eclipse应用停止后检查OSGi框架非常有帮助。 |
osgi.os | -os | 定义 Eclipse 平台在其上运行的操作系统。Eclipse 平台通常使用 Javaos.name属性的常用值来计算最佳设置。如果在此处指定该项,则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getOS() 用于插件,并用于解析插件清单文件中提及的路径中$os$变量的出现。示例值有:“win32”、“linux”、“hpux”、“solaris”和“aix”。 |
osgi.parentClassloader |
框架中所有安装的Bundle的类加载器的父类加载器类型。可用的类型为:
|
|
osgi.requiredJavaVersion | 运行Eclipse所要求的Java环境的最低版本。默认值为"1.4.1"。 | |
osgi.resolverMode | 对安装到框架中的Bundle的解析模式。设定值为"strict"时,框架将使用严格的解析模式。默认的解析模式是不 严格的。当使用严格模式解析Bundle时,框架从标记了x-internal 或 x-friends标签的导出包中加载类或资源时使用更严格的访问限定。 | |
osgi.sharedConfiguration.area | Eclipse平台运行时的共享配置存储区。如果参数"osgi.configuration.cascaded"设定为"true" ,该参数定义的共享配置存储区内的配置将作为根配置。 | |
osgi.splashLocation | 运行系统时,启动屏幕(.bmp文件)的URL绝对路径。该属性会覆盖"osgi.splashPath"属性的设定值。 | |
osgi.splashPath | 用逗号分隔的URL,该URL指向一个名为"splash.bmp"的文件。该属性会被配置参数"osgi.splashLocation"设定的任何值覆盖。 | |
osgi.startLevel | 框架的启动级别,默认启动级别为6。 | |
osgi.support.signature.verify |
用逗号分隔的Bundle签名校验策略。可选的策略包括:
|
|
osgi.syspath | 指定Eclipse OSGi框架(org.eclipse.osgi)实现的存储路径,如"/eclipse/plugins"。该属性在Eclipse平台启动时由系统设定,不需要用户配置。 | |
osgi.user.area | -user | 用户数据的存储位置。该位置特定于操作系统用户,与Eclipse安装位置无关,可用于存储用户配置数据。 |
osgi.user.area.default | 用户数据的默认存储位置。该位置特定于操作系统用户,与Eclipse安装位置无关,可用于存储用户配置数据。该属性只在参数"osgi.user.area"未设定时使用。 | |
osgi.ws | -ws | 该参数设定窗口系统类型,如win32, motif, ... |
3、其他命令行参数
说明:下述参数仅用于3.3以上版本
- --launcher.ini (Executable) NEW
.ini文件的位置。如果不指定,系统会在执行程序的相同位置查找与执行程序相同名称且扩展名为.ini的文件。如eclipse.exe会查找eclipse.ini,product.exe会查找product.ini。
- --launcher.suppressErrors (Executable) NEW
如果指定该参数,启动程序将不显示任何错误或消息窗口。
- -name NEW
当应用程序启动后,在任务中显示的程序名称。如果未设定,将显示.exe的名称。
- -noSplash (版本1.0+)
是否显示启动屏幕
- -showSplash (Executable, Main) NEW
指定启动屏幕使用的bitmap文件。如果设定了该参数,Equinox Launcher会在启动Java虚拟机之前显示启动屏幕。如果未指定,虚拟机启动后Main入口会查找参数osgi.splashLocation 和 osgi.splashPath 设定的启动屏幕文件。
- -startup (Executable) NEW
启动eclipse使用的jar文件的位置。该jar文件的MANIFEST.MF文件中中应设定Main-Class属性的值 为:org.eclipse.equinox.launcher.Main。如果该参数未设定,Launcher会在plugins目录下查找版本号最大 的org.eclipse.equinox.launcher组件。
4、launcher.ini文件格式举例
Equinox launcher.ini文件的命令行参数设定格式如下例所示:
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m