2012-03-26 46 views
2

我正在開發多個Eclipse特徵(組成一個可安裝單元的Eclipse插件組),並且我已經得到要求每個特徵都必須具備的能力被停用,或者換句話說,當Eclipse啓動時不會啓動。如何阻止Eclipse特徵在安裝後啓動

我有一個插件,它貢獻的UI(透視,奇才,菜單項等),我嘗試了,只是攔截調用像這樣的插件的啓動方法...

請注意,PluginVerification類正在另一個插件中運行,該插件將在安裝包含要停止的插件的功能時提供。換句話說,我的功能包含插件A,B和C. PluginVerification存在於C中,我想用它來控制插件A和B的啓動。

這裏是插件A和B的Activator類的啓動方法

/* 
* (non-Javadoc) 
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) 
*/ 
public void start(BundleContext context) throws Exception { 
    if(PluginVerification.verify(this)) { 
     super.start(context); 
     plugin = this; 
    } 
} 

如果調用PluginVerification.verify(本)返回false,那麼我不會啓動該插件。這是有效的,因爲這個插件並沒有啓動,但是這個插件貢獻的UI工件仍然顯示出來。例如,這個插件貢獻的嚮導仍然可以通過UI訪問。但是,當您嘗試使用其中的一個時,由於該插件從未啓動而引發NullPointerExceptions。

我希望有人可以幫助我找到更好的地方,真正阻止插件啓動,以便它不會貢獻它的UI工件。我打算提醒用戶他的產品沒有通過驗證,因此無法啓動。我希望用戶感覺功能已經從他的Eclipse環境中消失了。

謝謝您的考慮, 跟蹤

回答

2

我認爲你將有更好的運氣p2 director。至於爲什麼有些工件可用,可能是因爲您的插件已安裝(您可以使用osgi控制檯進行檢查),但未啓動。 enter image description here

+0

感謝您的鏈接。我一直在閱讀關於p2導演和API的大約一天半的時間。我試圖得到一些工作,以編程方式卸載,但沒有成功。當我得到它時,我會在這裏發佈。 – twindham 2012-03-28 17:30:13

1

你要看看在<eclipse_home>/configuration/config.ini文件和osgi.bundles財產

the eclipse help

osgi.bundles

的逗號分隔的列表束,被自動在系統啓動並運行後安裝並可選擇啓動。每個條目的格式如下:

<URL | simple bundle location>[@ [<start-level>] [":start"]] 

啓動級別指示應運行捆綁包的OSGi開始級別。如果省略了開始級別(> 0整數),則框架將使用該包的默認開始級別。如果添加了「開始」標籤,那麼該軟件包在安裝後將被標記爲啓動。

認爲你應該可以達到你想要做什麼,加入你捆綁到該列表,而不是有它列爲「開始」`和/或改變你們之間的startlevels插件,這樣一個在另一個之前開始。

另外,檢出Dude, where's my bundle

+0

我認爲他希望在運行期間根據許可證例如 – 2012-03-27 13:53:30

+0

這是完全正確的。理論是,將會定期檢查許可證的狀態,如果該檢查返回的許可證已移至「已撤銷」狀態,則必須切斷對該功能的訪問。 – twindham 2012-03-28 17:26:03

+0

弗雷德裏克,我現在看到你的答案是什麼,但我認爲使用P2 Director解決方案更符合我的要求。我需要用戶使他/她的插件被取消,卸載它們似乎是實現這一目標的最佳方式。我確實學到了一些關於開始水平的知識,所以非常感謝。 – twindham 2012-03-28 20:45:56