2011-07-13 60 views
4

我希望我們的功能測試能夠使用類路徑中快照的時間戳版本(例如api-0.5.0-20110706.191935-1.jar)從Maven運行。但是,雖然我可以看到我們的時間戳版本位於Artifactory存儲庫中,但Maven指的是api-0.5.0-SNAPSHOT.jar並從本地存儲庫中解析它。Maven:如何確保在類路徑中使用時間戳版本的快照?

背景 我們的持續集成(CI)服務器有兩個相關的構建版本。服務器版本運行mvn deploy,新的快照在正確構建的存儲庫中啓動。

我們還有一個功能測試版本,它獲取最新的正確版本,部署到開發服務器,然後開始對它進行測試。

看來正在發生的事情是功能測試版本依賴於API-0.5.0-SNAPSHOT.jar。當Server構建運行時,它將替換本地存儲庫中的快照,並且我們開始從功能測試構建中獲取NoClassDeFond錯誤。

因此,我想功能測試版本使用時間戳版本。

選項我目前知道的:

  1. 聲明在POM快照庫,並確保uniqueVersion是真實的(我很快就要構建嘗試此)。
  2. 使用version lock:snapshots目標將pom中的版本設置爲時間戳版本。
  3. 考慮在CI服務器的一次調用中運行服務器構建和功能測試。 (即刪除服務器版本)。

回答

1

這裏是簡短的回答:不要在CI構建中的項目之間使用SNAPSHOT依賴項。他們在你的本地機器上很好,但是CI環境往往不能很好地工作。 SNAPSHOTs如何解決有一個公佈的算法,但它是一團糟。相反,只需使用正常的依賴關係,並在您的CI中發佈發佈作業。換句話說,SNAPSHOT應該被認爲基本上不確定(至少從CI構建代理的角度來看)。

Versions plugin可能有助於跟蹤依賴關係。

**我看到它一致的唯一方法是如果您爲每個構建代理設置不同的存儲庫,然後在每次運行之間將其擦除。激烈,可怕,低效,不需要。

+0

你能提供一個發佈算法的鏈接嗎?我發佈了一個類似的問題,因爲我們在定位時遇到了問題。 –

+0

如果您提供鏈接,請回答以下問題:http://stackoverflow.com/questions/7662009/which-jar-ends-up-on-the-classpath-in-a-maven-incremental-build –

相關問題