2009-12-14 40 views

回答

1

一種方法是在插件A中定義一個擴展點「plugin_a_wizard_page」,並用插件B擴展它。這樣,插件A可以掃描擴展擴展點的插件並將所有這些添加到嚮導中。

你不得不看看巴迪級加載。簡而言之:PluginA必須定義一個Eclipse-BuddyPolicy: registered的策略,而PluginB必須將自己註冊爲PluginA的好友。

參見:Eclipse RCP: ClassNotFoundException or How to make other bundle load my class

然後PluginA可以做以下循環:

IExtensionRegistry registry = Platform.getExtensionRegistry(); 
IConfigurationElement[] wizardContributions = extensionRegistry 
      .getConfigurationElementsFor(
        "my.plugin", 
        "myExtensionPoint"); 

for (IConfigurationElement wizardContribution : wizardContributions) { 
    try { 
     IMyWizardContributionInterface listenerClass = (IContactsListener) wizardContribution.createExecutableExtension("class"); 
     // User your class and add it to the wizard 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
} 
0

是的,只要插件B在插件A的需求插件列表中(在插件A的清單中),那麼您可以在插件A中定義的任何擴展點訪問它。插件編輯器將幫助您這是因爲如果您指的是在嚮導擴展點無法訪問的類,它會給您一個警告。

+0

我想保持插件插件B的獨立 我有監聽功能,它通知某些插件的使用b事件插件A中,因此我掃描了ExtensionRegistry。但插件B中的所需插件列表插件A使插件A的插件(插件B已取決於插件A) – 2009-12-14 09:40:24

+0

感謝您的澄清(並對不起您的需求不正確地閱讀)。我認爲唯一的解決方案可能是擁有B和A所依賴的第三個插件,因爲據我所知,您無法在Eclipse中實現對插件的循環依賴。 – 2009-12-14 09:46:07