2017-04-21 51 views
0

我看到:解释摇篮DSL魔法maven.url

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 documentationMavenArtifactRepository有财产url

什么是以下 - 在url值或属性setter的调用方法调用:

maven.url 'http://example.com/artifactory/libs-release' 

什么是以下(我猜它调用MavenArtifactRepository构造函数):

maven { url 'http://example.com/artifactory/libs-release' } 
+0

可能与[使用赋值“=”和括号{}]相混淆(http://stackoverflow.com/questions/22759542/confused-with-the-use-of-assignment-and-brackets) –

回答

3

首先,让我们分析url属性访问(在这两个示例中):

是方法调用还是调用属性设置器?那么,它的两个。让我们引用Mr. Hakis blog

摇篮将创建一个代理类的实际类实现,并增加了(除其他事项外)也是一个属性setter方法。该方法具有属性的名称并且具有与该属性相同类型的单个参数。它与Groovy已经添加的setPropertygetProperty方法不同。

这是纯粹的语法糖,它支持组合配置和脚本的Gradle感觉。如果您认为这是误导性的,只需使用赋值运算符(这也将使用setter,这要感谢Groovy)。

那么,maven部分呢?

它看起来像repositories的财产。但是,如果我们查看其类型RepositoryHandler的定义,我们检测到它是一种创建新的MavenArtifactRepository的方法,该方法接受配置的闭包或操作(用于Java使用)。

这只是解释第二个例子,因为我们传递闭包,然后配置url属性。 Groovy允许跳过括号。

第一个例子比较棘手。我们仍然使用相同的方法,但是这次我们给出一个空的配置闭包作为参数。该方法仍返回一个新的MavenArtifactRepository,我们访问其url属性。

+0

我需要10杯咖啡和一个晚上才能理解这种语法魔法。你能推荐阅读官方文档旁边的主题吗? http://www.mrhaki.com/books.html中的某些内容? – gavenkoa

+1

其实,我没有读过任何书,只读过Gradle/Groovy文档和搜索Google的几个页面(这通常会导致Hakis博客)。 –