<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
    主站蜘蛛池模板: 久久精品国产亚洲AV高清热| 免费看国产曰批40分钟| 最近中文字幕大全中文字幕免费| 两个人日本WWW免费版| 久青草视频97国内免费影视| 精品久久久久久无码免费| 国产高清视频免费在线观看 | 亚洲中文字幕无码专区| 亚洲国产精品日韩专区AV| 亚洲精品国产高清不卡在线| av在线亚洲欧洲日产一区二区| 国产a v无码专区亚洲av| 亚洲三区在线观看无套内射| 亚洲成AV人片在线观看无码| 久久精品国产亚洲AV无码麻豆| 精品亚洲aⅴ在线观看| 亚洲ts人妖网站| 亚洲欧美日韩中文高清www777| 久久亚洲精品成人无码| 一本大道一卡二大卡三卡免费| 99视频在线观看免费| 99re热精品视频国产免费| 国产乱码免费卡1卡二卡3卡| 永久免费视频v片www| 亚洲色偷偷狠狠综合网| 香蕉视频在线观看亚洲| 国产成人精品日本亚洲专| 精品成人一区二区三区免费视频 | 在线aⅴ亚洲中文字幕| 美女黄色免费网站| 国产99久久久国产精免费| 久久狠狠躁免费观看| 最新中文字幕免费视频| 亚洲成a人在线看天堂无码| 亚洲VA成无码人在线观看天堂| 亚洲小视频在线播放| 国产精品亚洲一区二区在线观看 | 亚洲AV成人无码网站| aa级毛片毛片免费观看久| 91精品免费在线观看| 免费日本黄色网址|