2016-01-25 60 views
2

我試圖設置我們的持續集成來構建功能分支。我修改了我們的Gradle插件,將我們的庫項目工件上傳到Nexus,分支名稱作爲分類器。不過,我找不到一種方法來改變依賴這些庫的項目來動態設置分類器。使用Gradle動態設置分類器

我已經試過

project.configurations.all { config -> 
    conf.resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
     details.useTarget("${details.requested.group}:${details.requested.name}:${details.requested.version}:${branch_name}") 
     println "${details.target}" 
    } 
} 

但println的顯示目標尚未與分類更新。如果我動態更改名稱而不是使用分類器,它的工作原理。

是否可以動態設置分類器,如果是這樣的話?

類似的問題前面已經回答了該建議這樣做,我一直在嘗試的方式: https://stackoverflow.com/a/22780023/3209486

回答

0

看來你需要使用DependencyResolveDetails#useVersion代替DependencyResolveDetails#useTarget

configurations.all { 
    resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
     String branch_name = "someBranchName" 
     def newDependency = "$details.requested.group:$details.requested.name:$details.requested.version:$branch_name" 
     println "Overriding details: $details --> $newDependency" 
     details.useVersion newDependency 
    } 
} 

您可能還需要要添加一些檢查,以便您不覆蓋全部依賴關係,上面的代碼也將替換第三方依賴關係的分類器。因此,如果您有gson作爲依賴關係,您可能會看到類似這樣的錯誤:

Could not resolve all dependencies for configuration ':compile'. 
> Could not find com.google.code.gson:gson:com.google.code.gson:gson:2.3.1:someBranchName. 
    Searched in the following locations: 
     https://repo1.maven.org/maven2/com/google/code/gson/gson/com.google.code.gson:gson:2.3.1:someBranchName/gson-com.google.code.gson:gson:2.3.1:someBranchName.pom 
     https://repo1.maven.org/maven2/com/google/code/gson/gson/com.google.code.gson:gson:2.3.1:someBranchName/gson-com.google.code.gson:gson:2.3.1:someBranchName.jar 
    Required by: 
     com.example.stackoverflow.q34983255:1.0-SNAPSHOT