Gradle全局变量不在buildscript的范围内

Gradle全局变量不在buildscript的范围内,gradle,android-gradle-plugin,build.gradle,Gradle,Android Gradle Plugin,Build.gradle,在我的顶级build.gradle(gradle 2.2)中有类似的东西 这就是错误所在 Could not find property 'repo' on org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@718afa64. 因此,它适用于allprojects,但不适用于buildscript这是因为buildscript{…}配置闭包始终是首先计算的,因此尚未定义

在我的顶级
build.gradle
(gradle 2.2)中有类似的东西

这就是错误所在

Could not find property 'repo' on org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@718afa64.

因此,它适用于
allprojects
,但不适用于
buildscript

这是因为
buildscript{…}
配置闭包始终是首先计算的,因此尚未定义属性。一种解决方法是在构建脚本之外定义属性,方法是将其放置在
gradle.properties
文件中或通过命令行。

您可以在
构建脚本{…}
中将变量定义为with
ext
。该变量也可以在
allprojects{…}
的范围内访问:

buildscript {
    ext {
        repo = "https://my-artifactory-repo"
    }
    repositories {
        maven {
            url repo // works
        }
    }
}

allprojects {
    repositories {
        maven {
            url repo // works
        }
    }
}

听起来像是疏忽。不幸的是,这是一个生命周期问题。必须先计算
buildscript
闭包,然后再计算脚本中的其他内容,因为它设置了执行脚本时使用的类路径。您还可以将属性定义移动到buildscript中,然后它将“全局”可用。为我工作,但我只有一个buildsript配置,不知道它如何与multple configs一起工作。@MarkVieira我将我的属性放在
gradle.properties
中,但仍然出现此错误。对我来说,gradle.properties不是设置此类变量的好地方。我最终要做的是在构建脚本中添加变量并从中使用它们。例如:`buildscript{ext.dependency_version=“…”}依赖项{compile(“groupId:artifactId:$dependency_version”)}`
buildscript {
    ext {
        repo = "https://my-artifactory-repo"
    }
    repositories {
        maven {
            url repo // works
        }
    }
}

allprojects {
    repositories {
        maven {
            url repo // works
        }
    }
}