我正在使用Gradle作爲我的項目的構建工具。除了我的本地開發計算機外,還有一個Nexus存儲庫管理器從Maven Central(以及其他人)緩存包,以及Jenkins CI至少每天發佈的本地發佈和SNAPSHOT構建。如何爲使用mavenLocal的Gradle-build指定「updatepolicy」
在build.gradle
我有回購的定義如下:
repositories {
mavenLocal()
maven { url http://url.to.nexus:8081/nexus/... }
flatDir {
...
}
}
項目(A
)引用一些內部庫(例如B
) - 也快照版本。如果我構建A
,則引用的SNAPSHOT版本B
從Nexus中獲取,因爲mavenLocal
中沒有版本,並且Jenkins發佈了期望的版本 - 所以一切正常。
如果我更改了B
一些事情,並希望在A
立即使用,我建立/安裝B
本地安裝(使用gradle install
)和當前快照進入mavenLocal
使其可爲A
構建。 但是從這時起,圖書館B
是總是取自mavenLocal
。即使經過一段時間,同事更改B
,並且Nexus上有更新的SNAPSHOT版本,它將不會被使用。
使用Maven可以指定一個updatePolicy
像daily
(這也是默認值)來解決問題。但我沒有看到如何在Gradle中執行此操作(除了每天清除一次~/.m2/repository
)。
== == UPDATE
根據JLB的評論,我想補充:
我沒有,因爲依賴解析在Maven的設置中定義的任何信息庫和神器下載完全由Gradle管理。所以所有的存儲庫只在Gradle的構建腳本中定義。 使用本地Maven倉庫只是一個(通常推薦的)解決方法,以便在其他項目中使用本地(中間)倉庫構建,而無需每次都將它們發佈到某個倉庫管理器。 IMO擴展庫時(上述示例中的B
),這是至關重要的。
此外,這隻有在存儲庫的順序如上所述定義時纔有效。如果存儲庫上存在相同快照版本的工件,則即使可能存在更新的(快照)生成,也不會檢查進一步的回購。
謝謝你的回答。我在更新部分添加了一些附加信息。 – MrD
今天我遇到了同樣的問題,我發現http://asoftwareguy.com/2013/10/25/grails-2-3-maven-dependency-caching-issues/。它似乎工作,所以我會編輯我的答案 – jlb