我设置了一个Android项目,因此使用模块系统作为插件的一种方式"选择性地。
这是项目层次结构的样子:
模块2
...
基本上我想要做的是有选择地包括这些module1
和module2
,以便我可以决定在构建时要包含哪些模块。
我已经通过添加
实现了这一目标 compile project(:module1)
到build.gradle
并按如下方式设置settings.gradle文件:
include ':app', ':module1'
但这是真正的问题:老实说,我不知道为什么要修改这两个文件。
从技术上讲,build.gradle
文件描述了模块之间的依赖关系,这意味着如果我包含:module1,这并不意味着我在构建中包含了这个吗?
有没有办法对单个文件进行更改,它会处理所有内容,而不是更新这两个文件?
答案 0 :(得分:1)
您可以使settings.gradle
文件动态化,然后项目只需要处于可预测的路径中。将来要包含一个新项目,您只需创建文件夹结构并添加build.gradle
文件。
$ cat settings.gradle
// search for directories at the same level as the `settings.gradle` file
def moduleDirs = settingsDir.listFiles(new FileFilter() {
@Override
boolean accept(File pathname) {
// if is a directory and directory contains a `build.gradle` file add to `moduleDirs` list
return pathname.isDirectory() && pathname.listFiles(new FileFilter() {
@Override
boolean accept(File file) {
return file.name == 'build.gradle'
}
}).size() == 1
}
})
// now that we know all the modules create a project for each
// modules will define their own relationship (in their `build.gradle`)
// here we just declare the name and location of each
for (def moduleDir : moduleDirs) {
include ":$moduleDir.name"
project(":$moduleDir.name").projectDir = moduleDir
}
不是一个单独的文件解决方案,但您现在无需再次触摸settings.gradle
。
将来,如果有人想要建立消费者,他们可以依赖构建的jar
输出(即maven repo存储的jar)或将他们的项目添加到文件结构中。从那里,他们可以像往常一样选择build.gradle
projectA/build.gradle:
包含projectA && projectB
但不包含projectC..projectZ
// ...
dependencies {
compile project(':projectB')
}
projectC/build.gradle:
包含projectC && projectZ
但projectA || projectB
// ...
dependencies {
compile project(':projectZ')
}