在buildscript范围内使用gradle项目变量

在buildscript范围内使用gradle项目变量,gradle,Gradle,这里有一个类似的问题 但我发现了一个“变通办法”,看起来并不是最佳的 我有一个多梯度项目-我在主梯度文件中声明了存储库 使用 现在我还必须为构建脚本设置这些,因为我使用的是插件 所以再次构建脚本{存储库 现在,我不想两次粘贴URL,而是想使用一个属性,因为我认为project.ext属性在buildscript阶段没有设置,所以我把它们放在 在我的gradle.settings文件中 我无法设置rootProject.ext.xx设置,因此必须使用 gradle.ext { mavenURLs

这里有一个类似的问题

但我发现了一个“变通办法”,看起来并不是最佳的

我有一个多梯度项目-我在主梯度文件中声明了存储库 使用

现在我还必须为构建脚本设置这些,因为我使用的是插件

所以再次构建脚本{存储库

现在,我不想两次粘贴URL,而是想使用一个属性,因为我认为project.ext属性在buildscript阶段没有设置,所以我把它们放在 在我的gradle.settings文件中

我无法设置rootProject.ext.xx设置,因此必须使用

gradle.ext {
 mavenURLs =  [ companyURL1, companyURL2 ... etc]
}
现在我可以在build.gradle文件中使用gradle.ext.mavenURLs了

有更好的办法吗?
有没有一种方法可以在一个块中为所有项目设置buildscript和依赖项存储库,而不必为buildscript和依赖项重复一次?

非常感谢,我在哪里可以找到有关“project.with”的信息关键字?在DSL中找不到它它是groovy特性,而不是gradle特性。每个对象都可以使用
with
方法。谢谢,我理解带有简单容器对象的with特性-但是为什么在您的示例中使用它?不只是AllProject{repoClosure(buildscript.repositories)repoClosure吗(存储库)}已经工作了吗?因为您基本上只使用repoClosure()调用一个方法,所以不需要
project.with
inside
build.gradle
,因为project对象是隐式的。如果编写插件,
project.with{…}
非常方便,因为你可以使用与
build.gradle
相同的代码。你提到了插件,我以为你是通过插件来实现的。我没有机会验证答案,我也没有用
def repoClosure = { RepositoryHandler repoHandler ->
    repoHandler.mavenLocal()
    repoHandler.mavenCentral()
    ['http://mycompany/repo1', 'http://mycompany/repo2'].each { mavenURL ->
        repoHandler.maven {
            url mavenURL
            credentials {
                username 'foo'
                password 'bar'
            }
        }
    }
}
project.with {
    allprojects {
        repoClosure(buildscript.repositories)
        repoClosure(repositories)
    }
}
def repoClosure = { RepositoryHandler repoHandler ->
    repoHandler.mavenLocal()
    repoHandler.mavenCentral()
    ['http://mycompany/repo1', 'http://mycompany/repo2'].each { mavenURL ->
        repoHandler.maven {
            url mavenURL
            credentials {
                username 'foo'
                password 'bar'
            }
        }
    }
}
project.with {
    allprojects {
        repoClosure(buildscript.repositories)
        repoClosure(repositories)
    }
}