Gradle中依赖关系的依赖关系

时间:2015-05-15 22:42:45

标签: java eclipse gradle

我正在学习Gradle,我正在努力寻找最佳实践。

我将描述的项目是成功的。你可以在GitHub上克隆它,它是一个eclipse / java项目:https://github.com/pauloleitemoreira/GradleTests.git

假设我有一个MainProject,其中包含一些不属于MainProject的文件模块依赖项。

项目结构

x-MainProject
|        |
|        x-mainModule 
|
x-LibProject
|        |
|        x-libModule
|
x-BaseLibProject
         |
         x-baseLibModule

MainProject / setting.gradle文件:

include ':mainModule'

include ':LibProject', ':LibProject:libModule'
project(':LibProject').projectDir = new File(settingsDir, '../LibProject')
project(':LibProject:libModule').projectDir = new File(settingsDir, '../LibProject/libModule')

/*???*/include ':BaseLibProject', ':BaseLibProject:baseLibModule'
/*???*/project(':BaseLibProject').projectDir = new File(settingsDir, '../BaseLibProject')
/*???*/project(':BaseLibProject:baseLibModule').projectDir = new File(settingsDir, '../BaseLibProject/baseLibModule')

LibProject / setting.gradle文件:

include ':libModule'

include ':BaseLibProject', ':BaseLibProject:baseLibModule'
project(':BaseLibProject').projectDir = new File(settingsDir, '../BaseLibProject')
project(':BaseLibProject:baseLibModule').projectDir = new File(settingsDir, '../BaseLibProject/baseLibModule')

BaseLibProject / setting.gradle文件:

include 'baseLibModule'

我注意到Build时只执行MainProject / setting.gradle文件。在构建MainProject时,不会执行其他LibProject / setting.gradle和BaseLibProject / setting.gradle。

我用/*???*/标记了对我来说听起来很奇怪的行,因为我认为libModule必须知道你的依赖项在哪里。根据我的理解,这些行是不必要的,当构建LibModule时,gradle可以包含BaseLibModule。但不幸的是,如果我拿出这些内容,项目就不会构建。

我在考虑是否还有其他地方放置project(':...').projectDir = new File...,以避免包含依赖项文件的依赖项?

1 个答案:

答案 0 :(得分:0)

Gradle用户指南中的

Build lifecycle章解释了多项目构建的工作原理。简单版本是根项目文件夹中有一个settings.gradle,用于定义构建中包含哪些项目。每个项目都可以有build.gradle(或者名称可能不同,或者文件可能丢失)。