2011-03-04 74 views
1

最近,我們的開發團隊已經從Ant構建文件移動到Maven,進行項目管理和構建過程。到目前爲止,我對結果非常滿意。由於我仍然在熟練掌握Maven,所以我沒有準備好針對不尋常構建要求的答案。Maven中服務提供者接口的單元測試

現在我創建了一個新項目,並決定立即開始進行適當的Maven安裝。該項目實際上是一個使用Java服務提供程序接口(SPI)查找可插拔實現的API。這些實現可以以常規的META-INF/services/工廠名稱的方式進行註冊。 API負責完成大部分工作,但需要一個實現來獲得實際有用的任何內容。

我現在的問題是:我該如何着手編寫單元測試呢?有兩種方法來銘記:

  1. 創建測試包一個簡單的實現,有內置,然後用這個單元測試。這似乎並不適合Maven項目的生命週期。

  2. 創建一個包含測試實現的單獨項目。儘管這意味着我們SVN倉庫中的另一個條目,但感覺就像是更清潔的方法。該項目可以在主API項目的測試周期中構建並用作jar。它可以在主項目中列爲具有測試範圍的依賴性工件。

在這兩種情況下都存在一個基本問題......實現需要主API進行編譯。畢竟,它必須有一個工廠類來實現API的抽象工廠。但爲了正確構建主要的API,測試階段和全部,它需要測試實現。這實際上是一個循環依賴的問題。

在Maven中處理這個問題的好方法是什麼?在Ant中,我只是在API和測試之間構建實現。如果它有助於知道,我略微濫用SPI來定位捆綁的對象模型,而不是單一的實現。它不像JAXP,更像是一種註冊資源的方式。

回答

1

您可以使用maven-jar-plugin生成測試jar作爲您的常規生成過程的一部分。這樣您就可以在一個步驟中生成兩個工件。