Gradle:使用BuildScript RepositoryHandler作为Project Repository Handler

时间:2016-02-24 22:38:47

标签: gradle build.gradle

我实现了一个自定义插件,在这个插件中我提供了一个默认的存储库配置,如下所示:

class MyPlugin implements Plugin<Project> {

  ...
  ...
  ...

  @Override
  void apply(Project project) {

    project.repositories {
      mavenLocal()
      mavenCentral()
      jcenter()
    }

    ...
    ...
    ...
  }
}

但是,为了能够在构建脚本中应用我的插件,客户端代码将在其构建脚本中添加这样的部分:

buildscript {
  repositories {
      mavenLocal()
      maven { url "<organization maven repo url>" }
      mavenCentral()
  }

  dependencies {
    classpath 'com.organization.xxx:my-plugin:1.0.130'
  }
}

apply plugin: 'com.organization.my-plugin'

鉴于,我希望能够做到这样的事情:

class MyPlugin implements Plugin<Project> {

  ...
  ...
  ...

  @Override
  void apply(Project project) {

    project.repositories = project.buildscript.repositories

    ...
    ...
    ...
  }
}

但是,当我这样做时,我得到一个错误,可以理解,因为project.repositories属性是只读的。

那么,有没有一种正确的方法可以达到我的目的呢?

1 个答案:

答案 0 :(得分:2)

我认为错误是因为您正在尝试为属性project.repositories分配值。幸运的是,你只需要添加存储库,所以这可能会有效(未经测试)

@Override
void apply(Project project) {
  project.repositories.addAll(project.buildscript.repositories)
}

顺便说一下,我不确定你真的想要这样做。更好的方法是在其他地方定义公共存储库,然后可以添加到buildscript和project