在Gradle中定义依赖关系集

时间:2014-01-18 04:29:19

标签: dependencies gradle dependency-management

基本上我想要做的是定义一组依赖项,然后在各个构建脚本中调用一个函数或类似的函数来添加它们。基本上是这样的:

/build.gradle

apply plugin: 'base' // To add "clean" task to the root project.

subprojects {
    apply from: rootProject.file('common-deps.gradle')
}

/settings.gradle

include ":sub-project"

/common-deps.gradle

def addHttpComponents() {
    dependencies {
        compile     group: 'org.apache.httpcomponents', name: 'httpcore',   version: '4.3'
        compile     group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1'
    }
}

那么如果我想将HttpComponents添加到我的构建中。我希望能够将我的子项目的构建文件编写为:

/sub-project/build.gradle

apply maven
apply java

addHttpComponents()

有没有办法这样做,因为上面的文件无法运行。或者我完全以错误的方式解决这个问题。

1 个答案:

答案 0 :(得分:2)

首先,为什么你的方法不起作用:

apply from:将gradle脚本应用于项目对象。这意味着您可以在脚本中配置项目,但在该脚本中定义的本地方法不会在另一个脚本中神奇地提供。

您可以做的是将您的方法设置为项目对象的扩展属性。然后,您的方法将通过项目对象可用于其他脚本。

/common-deps.gradle 更改为

ext.addHttpComponents = {
  dependencies {
    compile     group: 'org.apache.httpcomponents', name: 'httpcore',   version: '4.3'
    compile     group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1'
 }
}

事情应该更好。


接下来,无论如何,你的方法对我来说似乎有点费解。为什么不呢:

<强>共deps.gradle

dependencies {
    compile     group: 'org.apache.httpcomponents', name: 'httpcore',   version: '4.3'
    compile     group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.1'
}

然后在 /sub-project/build.gradle

 apply from: rootProject.file('common-deps.gradle')

最后,我认为你的意思是

apply plugin: 'maven'
apply plugin: 'java'
/sub-project/build.gradle

中的