我明白了:
repositories {
maven.url 'http://example.com/artifactory/libs-release'
maven.url 'http://example.com/artifactory/libs-snapshot'
}
和
repositories {
maven { url 'http://example.com/artifactory/libs-release' }
maven { url 'http://example.com/artifactory/libs-snapshot' }
}
都工作。
According to documentation MavenArtifactRepository
拥有财产url
。
以下内容 - 对url
值的方法调用或属性设置器的调用:
maven.url 'http://example.com/artifactory/libs-release'
以下是什么(我猜它正在调用MavenArtifactRepository
构造函数):
maven { url 'http://example.com/artifactory/libs-release' }
答案 0 :(得分:3)
首先,让我们分析url
属性访问(在两个示例中):
是方法调用还是属性setter的调用?嗯,它有点两种。让我们引用Mr. Hakis blog:
Gradle将为实际的类实现创建一个代理类,并添加(以及其他)属性setter方法。该方法具有属性的名称,并且具有与该属性相同类型的单个参数。它与Groovy已添加的
setProperty
和getProperty
方法不同。
这是纯粹的语法糖,它支持Gradle组合配置和脚本编写的感觉。如果您认为它具有误导性,只需使用赋值运算符(由于Groovy,它也将使用setter)。
现在,那个maven
部分呢?
它看起来像repositories
的属性。但是,如果我们查看其类型RepositoryHandler
的定义,我们会发现它是一个创建新MavenArtifactRepository
的方法,接受闭包或动作(用于Java用法)以进行配置。
这简单地解释了第二个例子,因为我们传递一个闭包,然后配置url
属性。 Groovy允许跳过括号。
第一个例子比较棘手。我们仍然使用相同的方法,但这次我们给出一个空的配置闭包作为参数。该方法仍会返回新的MavenArtifactRepository
,我们会访问其url
属性。