我们将Gradle用于我们的项目,并且我正在尝试设置Gradle多项目以使我们的分支过程更容易。对于某些背景,我们的项目使用现有的参考平台,并根据需要添加/修改文件以实现我们的新功能。在某些情况下,更改可能会产生很大影响,我们会在进行更改之前对相关文件进行分支(使用Perforce)。
我们的项目结构如下:
'root project'
- 'subproject1'
- 'subproject2'
- 'subprojectN'
其中每个子项目都包含来自root的分支文件。
root project
依赖于我们的参考平台:
dependencies {
compile fileTree(dir: "$extDir/boot", include: '*.jar')
compile fileTree(dir: "$extDir/ext", include: '*.jar')
compile fileTree(dir: "$extDir/ext/admin", include: '*.jar')
compile fileTree(dir: "$extDir/ext/client", include: '*.jar')
compile fileTree(dir: "$extDir/ext/geotools", include: '*.jar')
compile fileTree(dir: "$extDir/ext/server", include: '*.jar')
compile fileTree(dir: "$extDir/../jdk/jre/lib/", include: '*.jar')
compile group: 'org.x', name: 'AdminControl', version: '1.9-SNAPSHOT'
compile group: 'org.x', name: 'AutoQuery', version: '1.9-SNAPSHOT'
...
}
问题就出现了,root project
还从我们的参考平台分支了一些文件,并覆盖了一些行为。例如,参考平台有一个文件MRReader
,它被分支到root project
(基本上包含一个副本)。
现在,当subproject
包含使用MRReader
的代码时,它会自动引用参考平台内的MRReader
(上述依赖项位于allprojects {}
下)。这会导致许多错误,例如root project
中添加的缺失方法,不同的行为等等。
我们如何让subprojects {}
使用root project
中找到的重写文件来支持参考平台中的文件?
我尝试了以下内容:
subprojects {
dependencies {
compile rootProject
}
}
无济于事。我认为我们必须添加根项目源目录作为子项目的源,但我不确定如何做到这一点。任何帮助将不胜感激。
谢谢!