2

我有一个项目,其布局如下:

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有一堆 jar,它们代表核心框架和框架运行所需的依赖项。

我想要完成的是罐子下的任何事情,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项目的绝对路径的最佳方法是什么?

4

1 回答 1

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'])
    }
}
于 2014-05-15T19:41:09.510 回答