定義延伸點

當您容許其他外掛程式來延伸或自訂外掛程式功能時,您必須定義延伸點。如同延伸項目, 先定義延伸點的第一步是新增某些標記至外掛程式的 plugin.xml 檔案。 範例如下:

   <?xml version="1.0" ?><plugin
      name="Simple Extension Point Plugin" 
      id="org.eclipse.sample"
      version="1.0">
      <runtime>
         <library name="extpt.jar" />
      </runtime>
      <extension-point
         name="Sample Extension Point"
         id="sampleExtensionPoint"/>
   </plugin>

這是定義自身延伸點所有需要做的事。連接至這個延伸點的延伸項目結構,不是由平台所解譯, 而是必須遵循延伸點提供者所定義的綱目。 唯一的限制是延伸項目標記必須為有效的 XML。 一旦您已定義延伸點,您可以在執行時期查詢平台的外掛程式登錄來查詢和處理可能存在的延伸項目。 在執行時期,延伸項目被作為 IExtension 物件來處理。 延伸項目由 IConfigurationElement 物件的樹狀結構所構成,每一個元素都在延伸項目標己中。下列程式碼片段查詢與上述定義的延伸點關聯的任何延伸項目的外掛程式登錄。

   IPluginRegistry registry = Platform.getPluginRegistry();
   IExtensionPoint point = registry.getExtensionPoint("org.eclipse.sample.sampleExtensionPoint");
   if (point != null) {
   IExtension[] extensions = point.getExtensions();
      System.out.println("Found " + extensions.length + " extensions");
   }

在簡單案例中,延伸點和它的延伸項目之間唯一的交談作業包含在延伸項目標記中。 延伸項目可能直接在延伸項目標記的 XML 中提供某些資料和喜好設定,之後, 延伸點外掛程式會讀取並處理資訊以提供一些自訂的行為。

與延伸項目中的程式碼交談

使用更多進階延伸點,您可能想要在執行時期與延伸項目所定義的物件交談。 技巧是定義延伸點的外掛程式通常不知道延伸項目中的類別名稱和套件, 所以必須定義一個介面來說明預期的類別結構。 然後,才能使用 IExecutableExtension 來建立 延伸項目的外掛程式中的類別實例,在執行時期使用介面與物件交談。

為了使用範例說明,下列 plugin.xml 檔案中的片段定義了連結至先前定義的範例延伸點的延伸項目:

   <extension
      name="Sample Extension"
      id="myExtension"
      point="org.eclipse.sample.sampleExtensionPoint">
         <someObject>
            <run class="org.eclipse.examples.SomeClass"/>
         </someObject>
   </extension>

這個延伸項目包括可執行延伸項目的標記,其中還包括要實例化的類別名稱。 這個類別必須符合定義延伸點的外掛程式所定義的介面。 如同之前所說明的,範例中("someObject" 和 "run")標籤的名稱為任意的。 這些標籤由延伸點綱目所定義。

例如,可執行延伸項目的介面稱為 ISomeInterface。 延伸點外掛程式中的下列程式碼片段將查詢外掛程式登錄,並為延伸點 "sampleExtensionPoint" 建立所有執行檔延伸項目的實例:

   IPluginRegistry registry = Platform.getPluginRegistry();
   IExtensionPoint point = registry.getExtensionPoint("org.eclipse.sample.sampleExtensionPoint");
   IExtension[] extensions = point.getExtensions();
   for (int i = 0; i < extensions.length; i++) {
      IConfigurationElement[] elements = extensions[i].getConfigurationElements();
      for (int j = 0; j < elements.length; j++) {
         if ("someObject".equals(elements[j].getName())) {
            ISomeInterface object = (ISomeInterface)elements[j].createExecutableExtension("run");
            System.out.println("Found an executable extension: " + object);
         }
      }
   }

以上就是它的所有內容!若要取得詳細資訊,請瀏覽 org.eclipse.core.runtime 套件的 javadoc,或查閱定義於 readme 工具中的延伸點(請參閱範例手冊以取得安裝指示)。 最好的查閱範例是 Eclipse 平台本身所定義的延伸點。

Copyright IBM Corporation and others 2000, 2003.