2011-07-30 111 views
14

我使用許多在karaf上作爲特性運行的軟件包組成的產品。通常,我們的開發人員一次只能處理一個包。我們的正常開發類似於:代碼,編譯,複製包以部署文件夾,測試。我們還發現,hotdeploy只是拒絕重寫某些作爲功能安裝的捆綁包,而無需重新啓動服務器或卸載/重新安裝功能,因此有時該週期較長。高效的OSGi開發工作流程

我的問題是:社區中有沒有人有更好的方法?我們做事情的方式很有效,但我覺得它非常慢,效率低下,我敢打賭,有人提出了更好的東西!

編輯:我意識到我的問題還不太清楚......我們在Karaf下面使用Equinox。我們也使用Eclipse和Maven,但我不知道使用Maven是相關的。

+0

我目前正在測試這些答案的過程中。他們都非常棒,我希望在接受之前看到最適合我的東西。 – Jon7

+0

任何更新,@ Jon7? –

+1

對不起等待!我玩過所有這些答案,我喜歡dev:看最好的。它需要最少的工作(這意味着人們會真正使用它),而且它做我們需要的。最終,我不認爲我希望每次點擊保存時都要重新編譯和重新部署eclipse。我想說,大約95%的時間點擊保存,我的代碼沒有處於工作狀態。我不得不說,我很享受編譯和看到新編譯的包自動奇蹟般地運行在我的服務器上! :) – Jon7

回答

8

聽起來像是你想要的開發:手錶命令。從文檔:

watch命令可用於幫助發展時間。它允許您配置一組將被監控的URL。所有與指定網址匹配的套餐地址將自動更新爲 。這樣可以避免手動更新軟件包,甚至在需要時將軟件包複製到系統文件夾。請注意,只有基於Maven的網址和Maven快照實際上會自動更新,因此,如果您運行

開發:看*

實際上,它將監視有匹配的位置MVN所有包:有*「-SNAPSHOT '在他們的網址。

在Karaf shell中執行「dev:watch --help」會列出其可用的標誌和參數。

同樣的事情也就是這些了PAX plugin

要麼將​​工作相當不錯,如果你有Eclipse的M2 Maven插件。

更新:在我的公司,我們努力做到儘可能TDD,因此很多開發都是在沒有明確啓動Karaf的情況下完成的。在單元測試的正常組合中,我們也使用了Pax Exam,即使在Eclipse中運行時也是非常棒的)=)

這有助於確保我們不會過分滿足任何卡拉夫特性,因爲它與Equinox/Felix /禮賓部(所以我嘲笑了我們依賴的各種卡拉夫細節,如JAAS認證)。除了許多其他很酷的工具/功能之外,它還能夠提供Karaf功能,並且使用TinyBundles,您甚至可以即時創建捆綁包(也可用於嘲笑/存根)。

Pax Exam通過提供JUnit @Runner綁定到JUnit框架中,最新版本(2)速度更快並且具有基於DSL的API,因此測試非常簡潔易讀。

使用Pax Exam爲我們提供了良好的測試覆蓋率和較短的開發時間。在測試不太實際的地方,或者我們正在尋找不在測試中出現的錯誤時,dev:watch命令是無價的。

總之;國際海事組織你絕對應該通過測試推動你的發展(Pax Exam會很好地插入你現有的構建中,一旦你習慣了它,你會發現更快的發展)。您可以立即開始使用dev:手錶命令,它肯定會加快您目前的狀況。

更新2:在回答另一個問題時,我添加了一個Maven示例Pax-Exam測試ComponentFactory。測試驅動開發可以說是當今開發人員可用的最高效的工作流程。鏈接到問題:osgi: Using ServiceFactories?和源代碼的鏈接:http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz

+0

特別是對於Karaf-Eclipse集成這可能是有用的:http://code.google.com/a/eclipselabs.org/p/eik/ – earcam

2

我在Eclipse中使用Equinox獲得了優異的結果 - 即使熱代碼替換也能正常工作。目標平臺很小,我們只有大約50束我們自己的訂單,但工作流程如下所示:

首先,我們有一個目標平臺,其中包含所有第三方和Eclipse軟件包,Eclipse照顧下載&管理他們。然後,該工作區包含該項目的所有捆綁包,分爲3-4個工作集。在保存時編譯會像往常一樣進行,有時需要重新編譯GWT,但即使如此,也會立即提取更改,因爲不需要進行部署 - 運行中的Equinox系統使用解壓縮的項目文件夾作爲捆綁包。在Eclipse中運行這個代碼給我們提供了熱代碼替換,即時更改模板文件,只有MANIFEST.MF/plugin.xml更改需要刷新包 - 即使如此,重新啓動框架通常比輸入更快控制檯。

+0

這個問題是關於卡拉夫+ Maven不Equinox/P2/EclipsePlugins – earcam

2

它取決於Karaf下的平臺:Felix或Equinox。

春分

Eclipse可以與您所選擇的束髮射春分優秀(或幾乎優)的支持。你需要準備的兩件事情是:

  1. 捆綁,正在研製中,在工作區中的插件項目
  2. 目標平臺,包含應用程序

這樣設置的剩餘束可用將允許您輕鬆更改捆綁包,甚至是運行時,並在需要時輕鬆重新啓動運行時。當你在遠程系統上進行開發時,我發現Karaf更適合,其中bundle是通過SSH或FTP部署的,或者當你使用Maven等外部構建工具時,它可以在運行時在運行時自動複製包。

如果您使用的是Equinox,那麼這將會帶來一些額外的優勢,因爲運行時將直接從工作區執行代碼。

菲利克斯

菲利克斯似乎不具備從Eclipse的推出(雖然有朝着這個工作,在this Jira issue跟蹤)這樣的支持。您也可以像普通的Java應用程序一樣啓動它,但這非常不方便。在這種情況下,使用Maven將是更好的選擇。您仍然可以設置Eclipse以充分利用PDE的其他功能,只有啓動將在外部完成。

摘要

總之,你可以隨時通過Maven的自動化一切,Karaf將極大地幫助您在這方面。如果你使用Equinox,Eclipse會有一點優勢。無論您使用何種方法,您都應該能夠進行熱代碼替換,因爲熱代碼替換甚至根本不考慮OSGi(除了唯一的情況,當您重新加載包並創建新的類加載器時)。

+1

這是不正確的 - 1)推出卡拉夫不同於推出卡拉夫包裝的Equinox/Felix框架(卡拉夫添加了許多功能) ,2)使用Eclipse的Maven插件無論是否配置爲使用Equinox/Felix都可以工作 - 在這種情況下使用Equinox沒有任何優勢。 – earcam

+0

1)這取決於你使用的是什麼卡拉夫以及他是否需要這個額外的功能。如果你放棄了這個功能,那麼Karaf就會增加這個功能,如果你使用Equinox,那麼你將會與Eclipse更好的集成。在費利克斯的情況下,沒有什麼變化。 2)我不是說當你有基於Maven的工作流和Equinox時,Eclipse可以提供幫助,如果平臺是Equinox,那麼基於Eclipse的工作流將比基於Maven的工作流更好,因爲Felix沒有如此集成到Eclipse中。 –

+0

我沒有抨擊你,只是試圖澄清與卡拉夫 – earcam

3

如果您使用Eclipse Eclipse天秤座可能對您有用。天秤座可以使用WST啓動Felix,Equinox和Knopflerfish內部的任何其他服務器。他們有一些youtube視頻如何使用它。

我也寫了一些工具,可以幫助:

  • 拾取過濾器匹配的OSGi服務OSGi包(osgitest = junit4)。因此,您不需要編寫Junit類,但可以提供預先配置的對象(例如,使用OSGI Blueprint)。 JUnit基於您的服務實現的接口中提供的註釋運行。
  • 具有以下有用的目標
    • 啓動OSGI容器和部署它的所有的包Maven項目Maven插件的依賴(這是當然的OSGI包)。 OSGI容器的啓動是在PAX考試的幫助下完成的,但是JUnit測試是在我編寫的OSGI包(運行您可能提供的OSGI服務)的幫助下啓動的。
    • 創建包含一個快捷方式到該項目的所有相關性(位於文件夾的Maven的回購或目標目錄)

文件夾如果項目被部署到服務器(Eclipse的天秤座)我必須說只更新X,其中X是捆綁的ID,並且所有內容都快速刷新。如果您在Libra中運行Equinox,您不必重新編譯發佈到服務器的項目,因爲它指向保存類或pom.xml時刷新的目標類文件夾。

如果您不將項目發佈到服務器上,而是將其作爲捆綁包添加到指向快捷方式文件夾的容器中,則還可以在運行mvn install(不重新啓動服務器)後在OSGi控制檯上運行update命令)。

甲一步一步指南可在http://cookbook.everit.org/

以下方法之上,能夠寫測試作爲TDD測試和運行它們作爲行家編譯CI服務器上的一部分。

我希望你會發現這些工具和我一樣有用!