具有多个Lib文件夹的Gradle Multi Project依赖项

时间:2014-05-15 16:09:57

标签: gradle multi-project

我的项目布局如下:

abc/
    abc-core/
        abc-core-actions/
            abc-core-actions-a/
                src/
            abc-core-actions-b/
                src/
        abc-core-package/
            src/
    abc-framework/
        abc-framework-core/
            lib/
        abc-framework-dependencies/
            lib/
    abc-utility/
        src/

lib项目的abc-framework个文件夹中有一堆罐子,它们代表了框架运行所需的核心框架和依赖关系。

我想要完成的是在abc-coreabc-utility下的任何内容,lib罐子都可以使用。

我发现做这样的事情:

project(':abc-core:abc-core-actions') {
    dependencies {
        compile fileTree(dir: '../../abc-framework/abc-framework-core/lib', includes: ['*.jar'])
        compile fileTree(dir: '../../abc-framework/abc-framework-dependencies/lib', includes: ['*.jar'])
    }
}

是否有效,但这意味着每个部分(abc-core:abc-core-actions-a,abc-utility等)我必须包含上面的部分及其相对部分。

理想情况下,我想定义所有子项目都对这些文件夹具有fileTree依赖性,但问题是路径会根据子项目而发生变化。

那么让compile fileTree引用abc项目的绝对路径的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用任何项目的内置projectDir属性来构建相对于您的某个项目的绝对路径,假设您的所有项目都参与相同的多项目构建。

因此,如果您在顶级build.gradle目录中有abc个文件,那么可能看起来像这样(基于您上面的评论):

//"project" here equates to the root project, i.e. "abc"
def frameworkCore = "${project.projectDir}/abc-framework/abc-framework-core/lib"
def frameworkDeps = "${project.projectDir}/abc-framework/abc-framework-dependencies/lib"
subprojects {
    dependencies {
        compile fileTree(dir: frameworkCore, includes: ['*.jar'])
        compile fileTree(dir: frameworkDeps, includes: ['*.jar'])
    }
}