2011-02-04 176 views
2

我不是maven guru,但我希望得到一些幫助。處理Maven快照 - 最佳實踐

這裏的情況:

我在使用Maven 2.我們有一臺Nexus倉庫,但它僅持有的版本,而不是快照大型分佈式開發團隊的工作。

的問題是2倍:

  1. 我每天早晨都使用svn了其他模塊,我不下工夫,建立他們,然後建立我的模塊

    。這是因爲我的模塊對這些其他模塊具有快照依賴性。這需要時間,並且真正加起來,因爲每個人都需要這樣做才能保持最新狀態。

  2. 說模塊A需要模塊B並被聲明爲快照依賴。模塊B更新到更高的版本號,但開發人員忘記更新模塊A pom。所以模塊A正在使用一個較老的快速啓動,它可能不會被識別一段時間,可能只有當它發佈的時候。

那麼如何最好地處理這些問題呢?

+0

你實際上提出了兩個問題,所以很難選擇一個答案。我建議分兩個問題。 – 2011-02-04 11:30:24

回答

6

我在一個大的工作,分配使用Maven 2.我們 有一臺Nexus倉庫,但它只 持有的版本中,沒有快照 開發團隊。

這就是問題所在。在你的聯繫中創建一個快照存儲庫。只要發行版倉庫和快照倉庫之間存在乾淨的分離,就沒有理由不將快照部署到聯結(我通常通過哈德森作業來完成),所以當哈德森作業成功時,倉庫中始終存在最新版本)

+0

他們說他們不想在存儲庫中放入快照。 – FinalFive 2011-02-04 11:45:18

+3

@FinalFive他們錯了。這是[單獨的`](http://maven.apache.org/pom。html#Repository) – 2011-02-04 12:04:32

+0

我同意(作爲Maven Dev和Nexus Dev)。 Nexus和Maven有意實施快照分離,所以沒有理由不在回購協議中。 – 2011-02-07 15:01:03

0

maven-versions-plugin有一個display-dependency-updates mojo,你可以用它來查明你是否沒有使用最新版本的工件。

1

如果你不想依賴於特殊的(快照)版本(你的問題的第2點),你應該考慮在你的dependecy聲明中使用version ranges

樣品從Maven Complete Reference Book

的JUnit版本大於或等於3.8,但小於4.0

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>[3.8,4.0)</version> 
    <scope>test</scope> 
</dependency> 

要小心,我覺得快照的處理(在考慮範圍內)在maven 2和maven 3之間是不同的。

如果你不想將SNAPSHOTS部署到你的NEXUS存儲庫(這將是最好的方式),你必須自己構建SNAPSHOTS。也許腳本或連續編譯工具如jenkins(易於使用 - 即使在本地計算機上)也可以幫助您。