2008-12-13 35 views
3

我正在構建一個Eclipse插件,該插件在常規插件項目中提供了一組核心功能。我通過片段項目提供的可選功能。但是我需要這些碎片在啓動時向主插件註冊。是否存在與Eclipse片段項目的BundleActivator等效的內容?

我不能在片段項目中使用Bundle-Activator。所以我想知道是否有一些替代機制來聲明一個入口點或一些可以掛鉤的回調?

如果除了將片段項目轉換爲常規插件項目之外沒有別的選擇,那麼我需要注意哪些缺點?

這是我使用了基於公認的答案的解決方案:

final IExtensionRegistry registry = Platform.getExtensionRegistry(); 
final IExtensionPoint extensionPoint = registry.getExtensionPoint("myextensionid"); 
final IExtension[] extensions = extensionPoint.getExtensions(); 
for (int j = 0; j < extensions.length; ++j) 
{ 
    final IConfigurationElement[] points = extensions[j].getConfigurationElements(); 
    for (int i = 0; i < points.length; ++i) 
    { 
     if ("myelementname".equals(points[i].getName())) 
     { 
      try 
      { 
       final Object objImpl= points[i].createExecutableExtension("class"); 
       objImplList.add(provider); 
      } 
      catch (CoreException e) 
      { 
      } 
     } 
    } 
} 
+0

這個問題應該作爲如何使用計算器的例子。謝謝! – 2009-01-18 11:03:31

回答

5

您可以定義一個擴展點和查找/通過擴展打電話給你的片段類。

IExtensionRegistry registry = Platform.getExtensionRegistry(); 
    IExtensionPoint extensionPoint = registry 
      .getExtensionPoint("myplugin.myextension"); 
    IConfigurationElement points[] = extensionPoint 
      .getConfigurationElements(); 
    for (IConfigurationElement point : points) { 
     if ("myextensionFactory".equals(point.getName())) { 
      Object impl = point.createExecutableExtension("class"); 
      if (impl instanceof IMyExtension) { 
       ((IMyExtension) impl).foo(); 
      } 
     } 
    } 
} 

編輯:

要使用這個方法,我必須轉換 我的片段項目插件 項目。 - bmatthews68

你不應該。舉例來說,在我的測試代碼,我在主機插件下列文件:

META-INF/MANIFEST.MF

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Myplugin Plug-in 
Bundle-SymbolicName: myplugin;singleton:=true 
Bundle-Version: 1.0.0 
Bundle-Activator: myplugin.Activator 
Require-Bundle: org.eclipse.core.runtime 
Eclipse-LazyStart: true 
Export-Package: myplugin 

的plugin.xml

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.2"?> 
<plugin> 
    <extension-point id="myextension" name="myextension" 
     schema="schema/myextension.exsd" /> 
</plugin> 

該片段包含以下文件:

META-INF/MANIFEST.MF

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Myfragment Fragment 
Bundle-SymbolicName: myfragment;singleton:=true 
Bundle-Version: 1.0.0 
Fragment-Host: myplugin;bundle-version="1.0.0" 

fragment.xml之:使用Eclipse 3.3.1.1生成

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.2"?> 
<fragment> 
    <extension 
     point="myplugin.myextension"> 
     <myextensionFactory 
      class="myfragment.MyExtension1"> 
     </myextensionFactory> 
    </extension> 
</fragment> 

這些項目。

+0

隨着您的迴應,我能夠在第一次嘗試時在插件中使用此功能。謝謝您的幫助。 – 2008-12-15 11:05:52

相關問題