用Gradle动态设置分类器

用Gradle动态设置分类器,gradle,continuous-integration,Gradle,Continuous Integration,我正在尝试建立我们的持续集成来构建功能分支。我已经修改了Gradle插件,将我们的库项目工件上传到Nexus,使用分支名称作为分类器。但是,我找不到一种方法来更改依赖于这些库的项目以动态设置分类器 我试过了 project.configurations.all { config -> conf.resolutionStrategy.eachDependency { DependencyResolveDetails details -> details.useT

我正在尝试建立我们的持续集成来构建功能分支。我已经修改了Gradle插件,将我们的库项目工件上传到Nexus,使用分支名称作为分类器。但是,我找不到一种方法来更改依赖于这些库的项目以动态设置分类器

我试过了

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显示目标没有用分类器更新。如果我动态地更改名称而不是使用分类器,它就会工作

是否可以动态设置分类器?如果可以,如何设置

前面已经回答了一个类似的问题,建议按照我一直尝试的方式进行:

似乎您需要使用
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