使用Gradle动态设置分类器

时间:2016-01-25 00:13:58

标签: gradle continuous-integration

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

我试过

(function() {

  foo = window.foo || {};

  //this will not error
  foo.helloWorld = function() {
    console.log('helloWorld()');
  };
  foo.helloWorld();

  var initFunction = function() {
     console.log('init()');
  };
  //this will no longer error
  initFunction();

  foo.init = initFunction;

})();

但println显示目标尚未使用分类器进行更新。如果我动态更改名称而不是使用分类符,则可以正常工作。

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

之前已经回答了一个类似的问题,建议按照我一直尝试的方式进行: https://stackoverflow.com/a/22780023/3209486

1 个答案:

答案 0 :(得分: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