2012-07-07 51 views
17

使用Maven開發OSGi應用程序有兩種主要方法:首先是POM-first和MANIFEST。在使用Maven開發OSGi應用程序時,我應該首先使用POM還是首先使用MANIFEST?

我正在尋找一個表格顯示每種方法的利弊的答案。

更具體地講,我也想知道它是如何涉及到:

  • 工具集的成熟度
  • 供應商獨立
  • 發展方便(包括找人,誰可以做開發所述工具)
  • 兼容性
  • 避免ClassNotFound的
  • 避免手工工作
+0

「我們在這裏播放兩種音樂...國家*和*西方。」換句話說,你已經提出了一個錯誤的二分法,並且有比「首先POM」和「首先MANIFEST」更多的選擇。特別是你看過Bndtools IDE嗎? – 2012-07-07 09:15:35

+1

這個問題顯然屬於徵求辯論和爭辯的範疇,應該關閉。 – Robin 2012-07-09 13:42:39

+0

我只知道處理這個問題的兩種方法:maven-bundle-plugin和tycho-maven-plugin。我正在將Eclipse插件轉換爲使用Tycho,所以我有一個「真正」的理由來使用它。我的參考OSGi應用程序不是基於Eclipse的使用Felix。到目前爲止,我在使用Tycho時看到了更多的缺點。 – 2012-07-17 10:30:00

回答

17

目前這是我能想出

POM-第一優點(使用maven-捆插件)

  • 利用現有的Maven的技能,資源庫和工具。
  • 可能更容易找到知道如何管理pom.xml而非MANIFEST.MF以及pom.xml的人
  • MANIFEST.MF中的大多數信息都可以從pom.xml本身獲取。
  • 可以與其他IDE一起使用,而不僅僅是基於Eclipse的。
  • 微創,只需添加單插件和改變包裝類型爲 「束」

POM-首先缺點

  • ClassNotFoundException更可能在運行時發生。但是,這可以通過使用pax考試來緩解(儘管設置起來非常複雜)。
  • 仍然需要了解如何設置MANIFEST以確保instructions配置元素設置正確。

Manifest優先的優點(使用第谷 - Maven的插件)

  • 好像是推薦的方法,或者至少談到作爲推薦的方法,但我實在看不出爲什麼它有顯着的好處。 (因此爲什麼問這個問題)。
  • 適合開發Eclipse插件與PDE很好地集成
  • 爲測試從而使ClassNotFoundException的JUnit測試,而不是在運行時出現的工具。

Manifest優先的缺點

  • 似乎只對基於Eclipse的IDE很好地工作。你不必使用Eclipse,但沒有你想要的PDE?
  • 違反DRY原則,因爲我必須將POM和MANIFEST.MF的名稱和版本保持同步。
  • 需要以特定的方式來命名的東西
  • 您不能混用,這意味着現有的Maven多項目設施不能只是釘在OSGi的支持
  • 更多的配置相比,Maven的捆綁,插件有很多是需要得到較少警告:http://wiki.eclipse.org/Tycho/Reference_Card#Examplary_parent_POM
  • 必須使測試用例成爲一個單獨的項目。它在src/test/java中生成時不會運行。
  • 似乎它只會測試暴露的類,換句話說就是「.internal」中的類。不可測試。

如果有人問我對於一個已經使用Maven,並希望移動到OSGi的企業的建議那麼這將是POM第一

如果有人問我爲別人的建議是誰做Eclipse插件開發,然後它是首先清單 - 與tycho

+0

有沒有辦法從MANIFEST.MF生成POM依賴關係? – 2017-09-13 16:10:00

0

MANIFEST首先不鎖定你到Eclipse(雖然我會很驚訝,如果超過一小部分人會使用其他任何東西)。 MANIFEST是重要的文件,需要添加到jar文件中,無論你如何做。另一方面,POM首先將你完全鎖定到Maven,你失去了OSGi包是一個普通的jar的優點,你可以用任何你想要的方式。

我已經試過兩種,我真的首選MANIFEST。 MANIFEST文件是一個非常重要的文件,我更喜歡通過製作生成該文件的文件來製作該文件。如果有些奇怪的事情發生,(它會在某個時候)清單文件是第一個檢查,如果它是你自己的文件,它會更容易。此外,無論如何你都必須熟悉它。所以,如果Maven是你的alpha和omega,POM首先會適合你最好的,但是你仍然需要對MANIFEST文件有深入的理解。

+3

我不能不同意這個立場,因爲它包含了太多重複的信息(例如導入的包),所以生成MANIFEST比手動維護它好得多。關於它非常重要的論點是假的,因爲應用程序中的'.class'文件也非常重要,而且你不會想用手寫這些文件。 – 2012-07-07 09:13:52

+0

有趣。我不反對生成一個MANIFEST文件,我只是說你確實需要熟悉它。通過查看MANIFEST文件可以解決或分析出現在stackoverflow上的許多問題。我從來沒有見過任何人請求字節碼。這兩者確實有不同的作用。無論如何,我期待着你的回答。 – 2012-07-07 09:32:45

+1

是的..你必須知道你的Manifest應該是什麼樣子。當您生成清單時,您仍然需要檢查它是否正常工作,但是您的手動工作量要少很多。所以我也支持產生Manifest。 – 2012-07-19 14:11:55

5

我想你應該選擇用例。對於服務器端OSGi項目,我喜歡pom的第一種風格。它很好地匹配了Maven構建,並且比Manifest更容易出錯。 事實上,在maven bundle插件後面的bnd在大多數情況下獲得Manifest權限,而無需任何額外的配置。訣竅是使用一些命名規則。例如,如果您命名內部包impl或內部,則不會導出。使用這種風格你不能使用Eclipse插件透視圖(至少沒有我不喜歡的bndtools),但我還沒有錯過這個觀點。我是Apache Karaf,CXF和Camel項目的開發人員,我們使用這種風格並且效果很好。特別是對於CXF和Camel,我們可以使用相同的構建和工具來支持OSGi和非OSGi部署。

對於Eclipse RCP應用程序首先清單是您需要插件透視圖和Eclipse IDE工具的方式。如果你想把它和maven結合起來,那麼tycho可能就是要走的路。

+0

我發現確切的事情是一樣的。我也用兩種方法開發,並在適當的時候繼續這樣做。這就是爲什麼我們使用Tycho作爲我們的RCP代碼的原因,所以我們仍然可以使用maven,但是通過使manifest成爲王者,它可以讓Eclipse更容易地開發RCP。 – Robin 2012-07-09 13:41:16

+0

謝謝,你的結論與我的結論相符,其實你的結論就是我在寫這個問題之前所想的。問題的原因是要列出每個人的利弊,以便我必須證明爲什麼我選擇了一個。 – 2012-07-19 05:09:13

相關問題