Equinox 和 OSGI 介紹

1.       背景信息
Equinox項目是Eclipse開源組織提供的OSGi框架的實現。Eclipse3.0版本開始,其內核移植到OSGi框架上。通過OSGi框架強大的組件控制,交互和管理能力,再加上Eclipse插件的自有特點,Eclipse開源框架得到了跳躍式的發展。同時,OSGi規範得益於Eclipse IDE環境龐大的使用者,OSGi聯盟也進入了快速發展時期。
OSGi框架在2006年之前還不爲廣大的開發者所知,OSGi的開源框架實現也只有ObjectWeb上的OscarKnopflerfish兩個實現。最初的OSGi標準主要應用於J2MEJ2SEEquinox的加入使得OSGi標準的應用領域不斷擴充,目前OSGiJ2EE方面的應用也在不斷的發展中。IBM Websphere Application Server6.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核心框架的實現
EquinoxOSGi核心實現由三部分組成,包括:
Ø OSGi核心規範的實現(org.eclipse.osgi
該項目是OSGi核心框架標準規範的實現。由於Eclipse3.0版本之前未採用OSGi作爲系統內核,所以,爲了重用Eclipse3.0以前核心繫統的代碼,EquinoxOSGi實現在一定程度上顯得比較繁冗。用戶如果想研究開源的OSGi框架實現的源代碼,可以從Oscar(目前爲ApacheFelix項目)或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實現項目
服務名稱
服務說明
Application Container
該項目實現了OSGi R4 MEG中的應用程序容器服務
Common Utility Bundle
由一組Eclipse工具類(如IStatusAssertIAdaptable等)組成的實用程序Bundle。該Bundle也可以在非OSGi環境中獨立使用。
Device Access Service
OSGi R4規範中的Device Access Service標準服務的實現,該組件由Prosyst公司提供實現。
Declarative Services
OSGi R4規範中的Declarative Service標準服務的實現,該組件由Prosyst公司提供實現
Event Admin Service
OSGi R4規範中的事件管理服務的實現。
HTTP Service
OSGi R4規範中的HTTP服務實現
Log Service
OSGi R4規範中的日誌服務實現
Metatype Service
OSGi R4規範中的Metatype服務的實現
Preferences Service
OSGi R4規範中的Preferences服務的實現
Extension Registry
Equinox提供的Ecipse擴展點(extension point)註冊表服務
Supplemental Bundle/JAR
Equinox提供的一組Equinox實現所使用的類型庫
User Admin Service
OSGi R4規範中的用戶管理服務實現
Wire Admin Service
OSGi R4規範中的服務通信拓撲管理服務
OSGi Services API
OSGi R4規範中的服務接口定義,該BundleOSGi聯盟定義的服務API接口組成
OSGi Utilities
OSGi R4規範中的工具類接口及接口實現Bundle
 
2.3OSGi的服務器端(J2EE實現)應用
Equinox實現了OSGiJ2MEJ2SE方面的應用的同時,也推動了OSGiJ2EE方面的應用。Equinox提供了一組基礎的Bundle,使得使用JSPServletStrutsJ2EE技術的Web應用項目可以運行於Equinox OSGi環境中。同樣的,Equinox通過一組Bundle,可以將Equinox OSGi應用嵌入到現有的Web服務器(如TomcatJetty等)和應用服務器(如WebsphereWeblogic等)中。
下面是EquinoxJ2EE應用方面的一組Bundle列表:
Equinox J2EE實現項目
服務名稱
服務說明
HTTP service
BundleOSGi R4規範中的HTTP服務的標準實現。目前該實現只支持Servlet 2.3
HTTP registry
Bundle支持使用Eclipse的擴展註冊表註冊servlet,文件資源和JSP而不是使用OSGi中的代碼註冊機制。
Servlet Bridge
Bundle提供一個底層的Hook servlet,使得Equinox可以嵌入到現有的應用服務器中運行。該Bundle中的servlet啓動嵌入的Equinox並使其可以處理來自底層應用服務器接收的HTTP請求。
HTTP Servlet
Bundle爲在Equinox中發佈其他servlet處理引擎(如傳統的應用服務器)爲OSGi HTTP服務提供支持
HTTP ServletBridge
Bundle爲底層的應用服務器(如TomcatJetty等)發佈爲OSGi HTTP服務提供一層封裝。封裝的應用服務器必須安裝該servlet bridge
Servlet API
Servlet規範標準接口APIBundle封裝。
Servlet JSP API
Servlet JSP API接口的Bundle封裝。
Jetty
嵌入式Jetty實現的Bundle封裝。目前Equinox提供的Jetty實現版本爲5.x
HTTP Jetty
Bundle封裝Jetty爲標準的OSGI HTTP服務。目前該服務只能使用Jetty 5.x版本;如果用戶希望使用Jetty 6.x版本的Bundle封裝,可以參考ops4j上的實現。
 
關於如何在Equinox環境中部署Web應用(JSPServletStruts等),請參考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.       結論與參考
本文簡要概述了EquinoxOSGi規範方面的實現以及它爲OSGi在其他領域的應用所做的研究。後續文檔中,我們將會將上述各個方面展開進行詳細的描述。OSGi的廣泛應用將大大推動JAVA由面向對象的編程向面向組件和服務的編程轉變。
目前,JCP組織提出JSR-291OSGi納入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 SubsytemComponent Model兩部分。據稱,該內核將在JDK 7中集成,同時,SUN在其開源的GlassFish J2EE應用服務器項目V3版本中將HK2作爲其系統內核實現。

1、概述

    在上文中講到,Equinox包括核心框架,標準服務實現,面向J2EE的應用,新的部署更新框架及一些其他的研究方向。本文主要針對Equinox實現的OSGi核心框架及Equinox OSGi運行環境的搭建過程進行詳細講述。

    用戶在閱讀下文時,應具有基本的Java編程及打包的概念並對OSGi標準的構成有一定的瞭解,理解OSGi框架及Bundle的概念。

2、OSGi核心框架

osgi_framework.jpg

 

    從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"。如下圖所示:

equinox-framework.PNG

    執行"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",即該組件被框架解析但沒有啓動。如果用戶希望組件在加載的同時啓動該組件,可以修改上述參數爲:

                               -Dosgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar@2: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文件,並在該文件中添加如下內容:

       osgi.bundles=org.eclipse.osgi.services_3.1.200.v20070605.jar@2: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 平臺通常使用 Java os.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框架使用的上下文類加載器的父類加載器類型,有效的類型包括:

  • app - application classloader.
  • boot -boot classloader.
  • ext - extension classloader.
  • fwk - framework classloader.
  • ccl - 在框架啓動時設定的原始的上下文類加載器(該參數的默認值).
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框架類加載器的父類加載器類型,可用的類型包括:

  • app - the application classloader.
  • boot - the boot classloader.
  • ext - the extension classloader.
  • current - 加載equinox launcher的類加載器
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 平臺通常使用 Java os.name 屬性的常用值來計算最佳設置。如果在此處指定該項,則這是 Eclipse 平臺使用的值。此處指定的值可作爲 BootLoader.getOS() 用於插件,並用於解析插件清單文件中提及的路徑中 $os$ 變量的出現。示例值有:“win32”、“linux”、“hpux”、“solaris”和“aix”。
osgi.parentClassloader

框架中所有安裝的Bundle的類加載器的父類加載器類型。可用的類型爲:

  • app - 應用程序類加載器.
  • boot - 啓動類加載器.
  • ext - 擴展類加載器.
  • fwk - 框架類加載器
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簽名校驗策略。可選的策略包括:

  • certificate - 啓用證書解析和校驗。
  • trust - 啓用證書信任校驗,該策略在"certificate"策略之上。
  • runtime - 在運行時校驗簽名的Bundle組件的內容。該策略在"certificate"策略之上。
  • all -等同於"certificate,trust,runtime"。
  • true - 等同於"all"。當框架啓動時設定。"osgi.support.signature.verify"參數的默認值。
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

轉載自:http://ssydxa219.iteye.com/blog/1308298

發佈了2 篇原創文章 · 獲贊 3 · 訪問量 771
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章