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

时间:2014-11-20 04:08:32

标签: gradle android-gradle build.gradle

我的顶级build.gradle(Gradle 2.2)

中有类似的内容
ext.repo = "https://my-artifactory-repo"

buildscript {
    repositories {
        maven {
            credentials {
                username foo
                password bar
            }
            url repo //doesn't work
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.14.1'

    }
}

allprojects {
    repositories {
        maven {
            credentials {
                username foo
                password bar
            }
            url repo //works
        }
    }
}

这是错误

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

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

2 个答案:

答案 0 :(得分:9)

您可以在ext中将变量定义为extra property buildscript {...}。然后,也可以在allprojects {...}

的范围内访问此变量
buildscript {
    ext {
        repo = "https://my-artifactory-repo"
    }
    repositories {
        maven {
            url repo // works
        }
    }
}

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

答案 1 :(得分:5)

这种情况正在发生,因为始终首先评估buildscript {...}配置闭包,因此尚未定义该属性。解决方法是在构建脚本之外定义属性,方法是将其放在gradle.properties文件中或通过命令行。