Groovy Gradle存储库作为项目字段

Groovy Gradle存储库作为项目字段,groovy,gradle,Groovy,Gradle,在gradle中,我可以使用自定义布局模式指定存储库,如下所示 repositories { ivy { url "http://repo.mycompany.com/repo" layout "pattern", { artifact "3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" artifact "company-ar

在gradle中,我可以使用自定义布局模式指定存储库,如下所示

repositories {
  ivy {
    url "http://repo.mycompany.com/repo"
    layout "pattern", {
        artifact "3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        artifact "company-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivy "ivy-files/[organisation]/[module]/[revision]/ivy.xml"
    }
  }
}
这很好,但是如果我还想使用
uploadArchives
buildscript
闭包,我还需要指定存储库。我的想法是将存储库划分为一个字段

@Field def myRepos = {
  ivy {
    url "http://repo.mycompany.com/repo"
    layout "pattern", {
        artifact "3rd-party-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        artifact "company-artifacts/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivy "ivy-files/[organisation]/[module]/[revision]/ivy.xml"
    }
  }
}
这适用于

repositories myRepos
要不是

buildscript {
  repositories myRepos
}

这给

No such property: myRepos for class: 'org.gradle.api.internal.initialization.DefaultScriptHandler'

我的gradle版本是1.11。

不用
@Field
,只需执行
def myRepos=…
buildscript
块非常特殊,如果您想在它和构建脚本的其余部分之间共享,您必须在
ext.myRepos=…
内部
buildscript
,并从外部使用
buildscript.myRepos
引用它。

这很有效!是否可以将此批次提取到单独的共享build.gradle文件中(使用“apply from”)?我试过了,但是在外部脚本中,
buildscript
方法似乎没有被调用,这是否与
buildscript
的特殊性有关?是的<无法将代码>构建脚本移动到单独的共享构建脚本中。也许它的内容可以,但这会变得复杂,我会尽量避免。从2.1或2.2开始,将有一个新的
plugins{}
块,它将逐渐取代
buildscript
,在这方面可能工作得更好。
No such property: myRepos for class: 'org.gradle.api.internal.initialization.DefaultScriptHandler'