在Gradle中,给定自定义依赖项配置,在Android中实际使用/编译它的最简单方法是什么?或者,在“本地”和“外部”依赖关系之间切换的最佳方法是什么?
为了使构建更容易并更好地利用多项目构建,我创建了一个其他人可能使用或不使用的顶级“聚合器”项目。因此,对子项目的任何修改都必须在聚合器中自包含。
在这个聚合器的构建过程中,我想总是使用子项目的本地版本(即我正在编辑的源代码),而不是我们的存储库中的编译工件。此外,此聚合器将用于我们的持续集成环境中,以便在每个代码提交时运行所有子项目的单元测试。
给定类似于以下内容的平面文件夹结构,其中所有项目/模块都是分离的,这样孩子们就不会对父母有所了解。
+ Parent Aggregator Project
|---- build.gradle
|---- settings.gradle
| + app
| |---- build.gradle
| + models
| |---- build.gradle
| + networking
| |---- build.gradle
| + utils
| |---- build.gradle
我在最顶层的项目中创建了以下build.gradle文件:
allprojects {
configurations {
localProjects {
extendsFrom compile
}
}
}
project(':app') {
dependencies {
localProjects project(':models')
localProjects project(':networking')
}
}
project(':networking') {
dependencies {
localProjects project(':utils')
}
}
localProjects
配置正常工作,并且每个配置都已成功用本地项目替换现有依赖项(如'com.mycompany:utils:1.0.0'和'com.mycompany:models:1.0.0') 。唯一的问题是我无法弄清楚如何让Android使用'localProjects'依赖集而不是'compile'依赖集。
在纯java示例中,我看到人们手动替换sourceSet中的类路径,但这对Android插件不起作用。
如何将Android构建指向自定义依赖项配置,以便使用这些依赖项而不是compile
,debugCompile
,releaseCompile
构建它们?
最终,我只想让增量构建工作。例如,如果我编辑'models'源代码,那么:
这是一个非常常见的用例,Gradle团队已经提到将来为这类事情添加更好的支持。与此同时,我们如何解决这个问题?
答案 0 :(得分:1)
你不能这样做 - 子项目将受到你的“聚合器项目”的影响。您可以做的是使其可配置是否在内部或外部解决特定依赖关系(子项目构建和整体构建)。有关概念验证,请参阅https://github.com/pniederw/elastic-deps。