<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    了解 Eclipse 插件如何使用 OSGi

    大多數 Java™ 編程語言開發人員通過作為 IDE 的功能認識了 Eclipse。Eclipse IDE 實際上由叫做插件 的交互式組件的集合組成。這些插件組成了 IDE 的基礎,它們還可用于創建其他桌面應用程序。創建基于 Eclipse 的應用程序所需的最小插件集稱為 Eclipse Rich Client Platform(RCP)。但是,插件本身不能啟動。它們需要在一個環境中啟動和操作。Eclipse 使用 OSGi R4 規范的實現提供了該環境。

    因為 Eclipse 在本質上是由 OSGi 驅動的,因此必須了解 Eclipse 插件的概念與 OSGi 框架有什么關系。在本文中,我將通過描述對 Eclipse 平臺而言插件是什么來詳細解釋這種關系。然后,將描述在 Eclipse V2.1 平臺到今天基于 OSGi 的實現中插件的發展。最后,將詳細介紹應用于 Eclipse 插件的 OSGi 提供的 manifest.mf 選項。

    插件是什么?

    Eclipse 聯機幫助將插件定義為:

    “插件是為系統提供功能的代碼和/或數據的結構化包。可以以代碼庫(帶有公共 [應用程序接口] API 的 Java 類)、平臺擴展甚至文檔的形式來提供功能。插件可以定義擴展點、定義良好的位置,其他插件可以在這些位置添加功能。”

    要注意的一個重點是插件以結構化方式提供功能。它們可以提供服務(比如日志)或可用于用戶界面(UI)的功能,比如編輯器。不管什么功能,所有插件都以相同的結構化方式來定義。 

    到 OSGi 的發展

    如前所述,Eclipse 使用 OSGi 作為插件系統的基礎。但并非總是如此。早期版本的 Eclipse 也設計為插件集合,而且 Eclipse 包括自己專用的插件系統來管理交互。但是,隨著 Eclipse IDE 要求的增長,必須需要一個更強壯的解決方案。這個新系統的基本要求包括動態添加新插件和停止現有插件的能力。經過大量研究之后,Eclipse 創建者決定通過實現 OSGi 框架規范替換專用的插件框架。

    OSGi 是服務平臺的規范。Eclipse 提供了該規范的許多可用實現之一,并用作最新 OSGi R4 規范的參考實現。OSGi 是基于 Java 的框架,旨在用于需要長運行時間、動態更新和對運行環境破壞最小的系統。起初,OSGi 旨在用于家庭自動化和家庭網關設備。最近,從手機到汽車都發現了它的蹤跡。

    在核心,OSGi 是一個組件和服務模型,如圖 1 所示。OSGi 規范定義了一個叫做綁定包 的模塊化單位。(在下文中,除非特別指明,Eclipse 術語插件 和 OSGi 術語綁定包 可交換使用,因為所有 Eclipse 插件現在都是 OSGi 綁定包。)OSGi 還提供了 Java Virtual Machine(JVM)級別的服務注冊,該綁定包可用于發布、發現和綁定至服務。

    OSGi 規范定義了綁定包生命周期的基礎架構和綁定包的交互方式。這些規則通過使用特殊 Java 類加載器來強制執行。在一般 Java 應用程序中,CLASSPATH 中的所有類都對所有其他類可見。相反,OSGi 類加載器基于 OSGi 規范和每個綁定包的 manifest.mf 文件中指定的選項(稍后將詳細介紹)來限制類交互。

    Eclipse IDE 使用圍繞模塊化和綁定包生命周期的一個 OSGi 子集。但是,它最低限度地使用了 OSGi 提供的服務支持。相反,Eclipse 提供自己的擴展點系統來啟用綁定包交互。綁定包將功能暴露給其他擴展。綁定包還定義自己的擴展點,允許其他綁定包向其貢獻功能。使用 Eclipse 中擴展點的一個示例是 Preferences 窗口。核心 Eclipse 插件提供中央窗口,并暴露擴展點以允許其他首選項頁面的貢獻。當插件添加到 Eclipse 中時,它們可以貢獻它們自己的頁面。Eclipse 中擴展點的模型不同于基本的 OSGi 服務。綁定包擴展點由定義綁定包擁有;其他綁定包只對這些點做貢獻。相反,任何綁定包可以實現和使用 OSGi 服務。

    使用 OSGi 實現 Eclipse

    在 3.1 之前版本的 Eclipse 中,在每個插件的 plugin.xml 文件中定義插件依賴關系以及擴展和擴展點。在使用 OSGi 的新版本 Eclipse 中,依賴關系信息被分解到 manifest.mf 文件中,而 plugin.xml 文件只包含擴展和擴展點的 XML 定義。看一個演示該發展的生動的工作示例十分有用。清單 1 展示了 Eclipse V3.0 中 org.eclipse.pde.ui 插件的代碼段。

    清單 1. org.eclipse.pde 插件中的代碼段

    <?xml version="1.0" encoding="UTF-8"?>
    <?eclipse version="3.0"?>
    <plugin
       
    id="org.eclipse.pde.ui"
       name
    ="%name"
       version
    ="3.0.2"
       provider-name
    ="%provider-name"
       class
    ="org.eclipse.pde.internal.ui.PDEPlugin">

       
    <runtime>
          
    <library name="pdeui.jar">
             
    <export name="*"/>
          
    </library>
       
    </runtime>
       
    <requires>
          
    <import plugin="org.eclipse.core.runtime.compatibility"/>
          
    <import plugin="org.eclipse.ui.ide"/>
          
    <import plugin="org.eclipse.ui.views"/>
          
    <import plugin="org.eclipse.jface.text"/>
          
    <import plugin="org.eclipse.ui.workbench.texteditor"/>
          
    <import plugin="org.eclipse.ui.editors"/>
          
    <import plugin="org.eclipse.ant.core"/>
          
    <import plugin="org.eclipse.core.resources"/>
          
    <import plugin="org.eclipse.debug.core"/>
          
    <import plugin="org.eclipse.debug.ui"/>
          
    <import plugin="org.eclipse.help.base"/>
          
    <import plugin="org.eclipse.jdt.core"/>
          
    <import plugin="org.eclipse.jdt.debug.ui"/>
          
    <import plugin="org.eclipse.jdt.launching"/>
          
    <import plugin="org.eclipse.jdt.ui"/>
          
    <import plugin="org.eclipse.pde"/>
          
    <import plugin="org.eclipse.pde.build"/>
          
    <import plugin="org.eclipse.search"/>
          
    <import plugin="org.eclipse.team.core"/>
          
    <import plugin="org.eclipse.ui"/>
          
    <import plugin="org.eclipse.update.core"/>
          
    <import plugin="org.eclipse.ui.forms"/>
          
    <import plugin="org.eclipse.ant.ui"/>
          
    <import plugin="org.eclipse.jdt.junit"/>
          
    <import plugin="org.eclipse.ui.intro"/>
          
    <import plugin="org.eclipse.ui.cheatsheets"/>
       
    </requires>


    <!-- Extension points -->
       
    <extension-point id="pluginContent" 
       name
    ="%expoint.pluginContent.name" 
       schema
    ="schema/pluginContent.exsd"/>
       
    <extension-point id="newExtension" 
       name
    ="%expoint.newExtension.name" 
       schema
    ="schema/newExtension.exsd"/>
    <extension-point id="templates" 
    name
    ="%expoint.templates.name" 
    schema
    ="schema/templates.exsd"/>
    <extension-point id="samples" 
    name
    ="%expoint.samples.name" 
    schema
    ="schema/samples.exsd"/>

    <!-- Extensions -->
       
    <extension
             
    point="org.eclipse.ui.perspectives">
          
    <perspective
                
    name="%perspective.name"
                icon
    ="icons/eview16/plugins.gif"
                class
    ="org.eclipse.pde.internal.ui.PDEPerspective"
                id
    ="org.eclipse.pde.ui.PDEPerspective">
          
    </perspective>
       
    </extension>

    <export name="*"/> 聲明暴露了插件中的所有包以供其他插件使用。插件依賴關系導入部分列出了 org.eclipse.pde.ui 插件需要的必備插件。

    接下來兩部分定義了 org.eclipse.pde.ui 可用于其他插件的擴展點以及它對其他插件的貢獻。在本例中,可以看到自定義 Eclipse Plug-in Development Environment(PDE)視圖的定義。

    下面來看 Eclipse V3.1 中的同一插件定義。

    清單 2. Plugin.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?eclipse version="3.0"?>
    <plugin>

        
    <!-- Extension points -->
       
    <extension-point id="pluginContent" 
       name
    ="%expoint.pluginContent.name" 
       schema
    ="schema/pluginContent.exsd"/>
       
    <extension-point id="newExtension" 
       name
    ="%expoint.newExtension.name" 
       schema
    ="schema/newExtension.exsd"/>
       
    <extension-point id="templates" 
       name
    ="%expoint.templates.name" 
       schema
    ="schema/templates.exsd"/>
       
    <extension-point id="samples" 
       name
    ="%expoint.samples.name" 
       schema
    ="schema/samples.exsd"/>

    <!-- Extensions -->
       
    <extension
             
    point="org.eclipse.ui.perspectives">
          
    <perspective
                
    name="%perspective.name"
                icon
    ="icons/eview16/plugins.gif"
                class
    ="org.eclipse.pde.internal.ui.PDEPerspective"
                id
    ="org.eclipse.pde.ui.PDEPerspective">
          
    </perspective>

    posted on 2008-03-12 18:49 gembin 閱讀(1739) 評論(0)  編輯  收藏 所屬分類: Eclipse

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 最新国产成人亚洲精品影院| 国产精品日本亚洲777| 久久精品亚洲乱码伦伦中文| 国产一卡二卡3卡四卡免费| 久久一区二区三区免费| 色窝窝亚洲av网| 一本天堂ⅴ无码亚洲道久久| 亚洲国产一区二区三区青草影视| av无码东京热亚洲男人的天堂| 成人人观看的免费毛片| 国产成人精品免费视频网页大全| 在线观看肉片AV网站免费| eeuss影院www天堂免费| 免费一级做a爰片久久毛片潮| 在线aⅴ亚洲中文字幕| 亚洲人成在久久综合网站| 色拍自拍亚洲综合图区| 亚洲av永久无码精品网站| 亚洲精品无码国产| 精品国产_亚洲人成在线高清 | 国产亚洲一区二区手机在线观看| 国产成人aaa在线视频免费观看| 在线天堂免费观看.WWW| 国产香蕉免费精品视频| 最近在线2018视频免费观看| 国产精品免费观看调教网| 国产偷伦视频免费观看| 久久福利青草精品资源站免费| 91成人免费福利网站在线| 一个人免费观看视频在线中文| 一级做a爰片久久毛片免费陪| 色妞www精品视频免费看| 污污视频免费观看网站| 曰批全过程免费视频观看免费软件| 亚洲AV成人无码网站| 国产亚洲视频在线观看| 成年网在线观看免费观看网址| 成人a毛片视频免费看| 黄色网址免费在线观看| 波多野结衣免费一区视频 | 国产一级淫片a视频免费观看|