2008-10-29 79 views
44

我想使用maven release插件發佈快照項目'foo-1.0-SNAPSHOT'。該項目取決於尚未發佈的第三方模塊「bar-1.0-SNAPSHOT」。 我在我的項目的pom.xml中使用選項'allowTimestampedSnapshots'來允許時間戳快照,但我認爲第三方模塊(酒吧)沒有時間戳,除非我自己構建它,因爲maven仍抱怨未解決的SNAPSHOT依賴項。如何發佈依賴於第三方SNAPSHOT項目的項目

有沒有辦法來釋放FOO項目無論依賴快照的項目,如果沒有我怎麼能添加一個時間戳第三方項目?

回答

7

簡短的回答是看following answer ....長的答案是你可以解決它。

我在過去應對的唯一方法是有效地分叉第三方庫並自己發佈一個版本。這當然說起來容易做起來難,如果圖書館龐大而複雜,而且如果第三方圖書館是封閉的源代碼則不可能。一條更容易的路線可能會接近第三方,並要求他們減少發佈。

另一種選擇可能是複製他們的POM(確保它沒有快照)改變版本信息,並手動安裝POM和工件在你的資料庫。

+5

不完全正確,請參閱其他答案,通過`-DignoreSnapshots = true`可以告訴maven甚至可以釋放快照依賴關係。你應該避免這樣做,只有在絕對沒有其他選擇時纔會這樣做,是另一回事。 – 2013-11-22 01:14:18

+0

Sonatype的建議是部署到本地存儲庫http://blog.sonatype.com/2009/01/best-practices-for-releasing-with-3rd-party-snapshot-dependencies/#.UstQinlq5t0 – 2014-01-07 00:59:26

-2

只需安裝您自己的POM的罐子。我通常會更改組和工件ID以明確這不是正式版本,但這通常是解決您的問題的最佳解決方案。

6

以前的答案建議將組和工件ID ...當這種依賴被釋放,你會在這兩個副本最終沒有這樣做,因爲行家不會承認它作爲同一工件後類路徑。我的首選方法是隻更改版本,我會做這樣的:[原始版本] - [我的組織名稱] - [svn版本我拉它],所以我得到像1.0-SONATYPE-3425的東西。通過使用svn rev,我總是可以再次獲取源代碼並在需要時進行修補,並且確切知道我正在使用的是什麼,而無需將整個源代碼放入我自己的svn中。

更新 - 我blogged關於這一陣子回來。

138

問題與allowTimestampedSnapshots參數名稱有關,它在文檔中,但插件的源在表達式中使用了不同的參數名稱 - ignoreSnapshots

所以只使用-DignoreSnapshots=true和準備發行的插件目標會忽略快照依賴。

12

使用的

-DignoreSnapshots=true 

代替

-DallowTimestampedSnapshots=true 

在我的情況下幫助行家釋放小插件選項,這將允許使用與依賴快照版本準備和執行釋放。

這個選項應該非常小心處理,因爲使用快照版本釋放以後可以打破你的版本中,如果依賴快照更新,在正常情況下,是不是你想要的。

相關問題