2016-03-02 57 views
1

我正在使用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可以指定一個updatePolicydaily(這也是默認值)來解決問題。但我沒有看到如何在Gradle中執行此操作(除了每天清除一次~/.m2/repository)。

== == UPDATE

根據JLB的評論,我想補充:

我沒有,因爲依賴解析在Maven的設置中定義的任何信息庫和神器下載完全由Gradle管理。所以所有的存儲庫只在Gradle的構建腳本中定義。 使用本地Maven倉庫只是一個(通常推薦的)解決方法,以便在其他項目中使用本地(中間)倉庫構建,而無需每次都將它們發佈到某個倉庫管理器。 IMO擴展庫時(上述示例中的B),這是至關重要的。

此外,這隻有在存儲庫的順序如上所述定義時纔有效。如果存儲庫上存在相同快照版本的工件,則即使可能存在更新的(快照)生成,也不會檢查進一步的回購。

回答

0

from gradle doc點23.6.3解釋說graddle會尋找你的Maven的settings.xml 嘗試定義在$ USER_HOME更新策略/ .m2目錄/ settings.xml中定義您的遠程repositroy那裏設置更新政策,以「總是」 https://maven.apache.org/settings.html#Repositories

還指出23.7解釋了從依賴決策規則:

鑑於所需的相關項,搖籃首先嚐試解析該依賴的模塊。每個存儲庫是爲了檢查,首先尋找指示模塊

的除其他事項外 愚蠢的問題在這裏存在一個模塊描述符文件(POM或常春藤文件):你試過之後定義mavenLocal()您的自定義回購,以便在查看本地回購之前,構建首先搜索新的依賴關係?

repositories {  
     maven { url http://url.to.nexus:8081/nexus/... } 
      ... 
     } 
     mavenLocal() 
    } 

好了,所以我今天就遇到了這個問題,我發現this。我試過了,它將新的插件版本下載到我的本地倉庫中。沒有時間仔細閱讀鏈接,但與(2.5.3的gradle)的工作

mavenRepo ("http://my.server/repos/my-grails-plugins") { 
    updatePolicy 'always' 
} 

,並使用

grails compile --stacktrace --verbose --refresh-dependencies 

因此,有這麼

+0

謝謝你的回答。我在更新部分添加了一些附加信息。 – MrD

+0

今天我遇到了同樣的問題,我發現http://asoftwareguy.com/2013/10/25/grails-2-3-maven-dependency-caching-issues/。它似乎工作,所以我會編輯我的答案 – jlb

0

我找到了答案在這裏: https://discuss.gradle.org/t/how-to-get-gradle-to-download-newer-snapshots-to-gradle-cache-when-using-an-ivy-repository/7344

由於快照是一個Maven的概念,他們不被視爲任何 特殊一個'常春藤'儲存庫。不幸的是,還沒有任何 方式來指定'maven'存儲庫的自定義模式,所以你的位置卡住了 。

告訴Gradle檢查 依賴項的更新版本的最好方法是將依賴項標記爲「更改」。然後,Gradle將會每隔24小時檢查一次更新,但可以使用 resolutionStrategy DSL進行配置。

configurations.all { 
    // check for updates every build 
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds' 
} 
    dependencies { 
    compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true 
}