Gradle:在范围内定义变量?

时间:2017-06-27 19:42:09

标签: variables dictionary gradle groovy scope

在Gradle中,我们可以定义和访问如下变量吗?在范围(命名空间)中定义变量的更方便的方法。

GROUP BY Key1,Key2

或者需要地图

foo {
   bar1 {
      variable1 = 'hello';
      variable2 = 'hello2';
   }

   bar2 {
      variable1 = 'hello';
      variable2 = 'hello2';
   }

}

println foo.bar1.variable1
println foo.bar2.variable2

3 个答案:

答案 0 :(得分:2)

您应该使用ConfigSlurper

foo.groovy

中设置变量
foo {
    bar1 {
        variable1 = 'hello'
        variable2 = 'hello2'
    }
    bar2 {
        variable1 = 'hello'
        variable2 = 'hello2'
    }
}

然后加载

ConfigSlurper foo = new ConfigSlurper().parse(new File('/path/to/foo.groovy').toURI().toURL())

println foo.bar1.variable1
println foo.bar2.variable2

答案 1 :(得分:1)

我通常看到它完成的方式是在单独的脚本中使用ext

gradle/common.gradle

ext {
    foo = [
        bar1: [
            variable1 : 'hello',
            variable2 : 'hello2'
        ],
        bar2: [
            variable1 : 'hello',
            variable2 : 'hello2'
        ]
    ]
}

然后在您的构建脚本中;

applyScript 'common.gradle'

答案 2 :(得分:0)

如果您想在local global中达到gradletasks的范围,我们可以做类似的事情,

def version = "3.0"

task Task1 {
    description "sample task #1"
    doLast {
        version = "1.0"
        println "exec doLast - task 1"
        println "since verison - $version"
    }
}

task Task2 {
    description "sample task #2"
    doLast {
        version = "1.0"
        println "exec doLast - task 2"
        println "since verison - $version"
    }
}

task Task3 {
    description "sample task #3"
    dependsOn Task1
    doLast {
        version = "2.0"
        println "exec doLast - task 3"
        println "since verison - $version"
    }
}

task Task4 {
    description "sample task #4"
    dependsOn Task3, Task2
    doLast {
        println "exec doLast - task 4"
        println "since verison - $version"
    }
}

这将创建一个全局变量version,然后每个任务都会根据用途创建一个局部变量version

工作
由于局部变量是在doLast中定义的,因此它们是在运行task时创建的,而不是在gradle构建生命周期的configuration步骤中创建的。