为什么配置样式在gradle中不一致?

时间:2017-04-14 14:30:41

标签: gradle

我是新手,并且有些事情让我感到困惑。有些东西看似不一致的编码/配置风格。

例如,当我们将存储库配置为jcenter或mavencentral时,我们调用一个函数/方法,例如jcenter。

repositories {  
   jcenter()  
}

但是,在同一个文件中,当我们尝试配置依赖项时,我们不再调用函数/方法。

dependencies {
   classpath 'com.android.tools.build:gradle:2.3.1'
}

然后显然有变量获得值

productFlavors {
    prod {
        versionName = "1.0-paid"
    }
    mock {
        versionName = "1.0-free"
    }
}

我确信这种不一致的原因背后有一个原因,但在阅读文档时找不到任何内容。有人可以解释一下原因吗?

2 个答案:

答案 0 :(得分:2)

实际上这些例子并没有那么不同。

classpath 'com.android.tools.build:gradle:2.3.1'

也是一个函数调用。 Groovy(编写gradle构建脚本的语言)允许您在很多情况下省略参数的括号。

答案 1 :(得分:2)

这是Groovy使用的语言灵活性(我更喜欢这种不一致性)。 在Groovy中,如果函数/方法的名称后跟匹配参数,则可以调用函数/方法,但如果没有参数,则必须添加括号以使其成为对函数的调用,并使其与它所代表的闭包不同。 这是一个使用groovysh的例子

groovy:000> def a(){println "a"}
===> true
groovy:000> a
===> org.codehaus.groovy.runtime.MethodClosure@95e33cc
groovy:000> a()
a
===> null
groovy:000> def b(arg){println arg}
===> true
groovy:000> b
===> org.codehaus.groovy.runtime.MethodClosure@d771cc9
groovy:000> b "argument"
argument
===> null
groovy:000> b("argument")
argument
===> null
groovy:000>