2011-11-04 122 views
2

我有一個Eclipse的RCP應用程序,我想沒有運氣安裝一個插件我已經創建應該單獨部署到上述應用程序。添加插件與自動啓動日食RCP應用程序

要做到這一點,我啓動該應用程序爲./App -console,當它已經停止裝載,I型:

install file://URLTOjAR/plugin.jar 

它返回我的一個插件ID(可以說288),所以我鍵入算賬:

start 288 

在此之後,插件工作正常,但是當我重新啓動應用程序時,通過使用ss我只能看到該插件只是「已解決」,但我希望它被啓動。

有沒有辦法讓這個自動化?

+1

如果你期望你的插件是'ACTIVE'並且它只是'RESOLVED',那麼在osgi控制檯中使用'diag '操作。它將顯示需要在運行時配置中添加的缺少插件。 – kon

回答

1

安裝和啓動的捆綁包應該在下次啓動時啓動。

也許當框架試圖啓動bundle並且它仍然處於RESOLVED狀態時激活器會引發異常。檢查日誌。也許這個捆綁包不能很好地處理那些在啓動時尚未提供的服務。

+1

你說得對,插件依賴於尚未加載的特定包。 –

0

我不知道天氣我得到你的問題的權利。但我會給出一個嘗試:

  1. 爲什麼你想安裝包/插件,不涉及到application.If你的插件/包無關,與正在運行的應用程序環境,那麼就使用Eclispe的環境用所需的其他插件啓動捆綁軟件。

  2. 我想這裏發生了什麼是你捆綁得到延遲加載。如果應用程序插件沒有使用這個包,那麼這很有意義。

  3. 如果你真的想使束開始與您的應用程序,你可以做的是,

發現列出捆綁的所有啓動信息在你的RCP應用程序的配置文件。

*如果應用程序使用simpleconfigurator

插入在配置文件中的一個捆綁軟件信息,這將config.ini文件 *或bundles.info文件。 (那裏有一個參數,如果你想立即啓動設置 - '真')

HTH, --Pradeep

+0

我正在嘗試安裝一個插件,因爲我爲客戶開發了一個應用程序,可能會由第三方進行擴展。正如你在第2點中所說的那樣,只要我不知道哪個類將被實現,它就不會被應用程序引用。 –

0

創建另一個插件,其中:

  1. 監聽捆綁生命週期事件(使用BundleListener) 。
  2. 記錄添加分組。
  3. 啓動時,查找上次啓動的記錄並啓動此處列出的軟件包。
2

由於您使用的是Eclipse RCP應用程序,因此很可能使用SimpleConfigurator來確定當前安裝的捆綁軟件列表。打開文件App/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info

在那個文件中有一個已安裝的軟件包列表,它們的版本以及它們是否應該自動啓動。你會看到這樣一行:

ch.qos.logback.classic,0.9.27.v20110224-1110,plugins/ch.qos.logback.classic_0.9.27.v20110224-1110.jar,4,false 

線的不同部分是這樣的:

  1. 束標識符
  2. 捆綁版本
  3. jar文件名,相對於安裝位置
  4. 開始級別(通常只設置爲4)
  5. 是否自動啓動捆綁包,將其更改爲true。

所以,只需在你的bundles.info中添加一行這樣的行,你應該很好去。

+0

我想我不使用簡單的配置器,只要我沒有看到你說的文件,謝謝。 –

0

這是解決這個問題的另一種方法。比使用簡單的配置器更復雜一些(參見我的其他答案),但它應該更廣泛適用。

在文件configuration/config.ini中,應該有一個屬性osgi.bundles。該屬性使用逗號分隔的軟件包列表在osgi實例中使用。該物業是這樣的:

osgi.bundles=file:/path/to/bundle,file:/path/to/other/[email protected]\:start 

的@ 1是捆紮的開始水平以及:start即,包應該自動啓動。