我正在修改'local.gradle'的概念,如果local.gradle存在,它可以为子项目添加/扩展build.gradle。简单的例子:
if(file('local.gradle').exists()){
apply from: 'local.gradle'
}
这样做可行,并且可以修饰本地构建,但不会“堵塞”我们的连续构建与工作站等的goop。
麻烦的是,我的local.gradle文件之一想要使用这样的插件:
apply plugin: 'fladoodle'
buildscript {
repositories {
maven {
url 'http://dl.bintray.com/niftystuff/pseudorepo'
}
}
dependencies {
classpath 'org.home:gradle-fladoodle-plugin:0.1'
}
}
这种方法有用,但是local.gradle中的任务和内容并不真正“了解”多项目构建和根构建文件的内容;像tasks.getByPath(':somesub:somejar')这样的东西在local.gradle中似乎没有意义。
所以我移动了用于将插件定位到根目录的buildscript内容;接近(实际上)在根构建中声明其他插件依赖项的部分。 local.gradle只有一个apply,然后gradle该插件的东西;一切都很好,绝对的道路似乎现在正在发挥作用。我没有在root setting.gradle中包含对local.gradle的任何引用...我也不想...
但是,现在我在root build.gradle中有些东西真的不属于那里 - 因为root永远不会知道sub是否会有local.gradle。注意:buildscript的东西不在所有项目{}或子项目{}中 - 所以它真的不能问我正在处理的当前子的问题,是否有local.gradle;如果是这样的话,在buildcript {}中添加一个新的maven repo来解析可能在local.gradle中使用的插件(此外,root应该真的不需要知道本地文件是否希望应用额外的插件 - 只是闻起来像坏耦合)。
因此可以有条件地包含'local.gradle'文件,以某种方式影响插件“应用”依赖关系的方式,而不必将此信息泄漏到其他地方(即根目录)构建?
答案 0 :(得分:2)
buildscript{}
仅适用于多项目gradle构建中的根项目。buildscript{}
块中;
您可以尝试以下方法将插件的依赖项与常见buildscript{}
配置build.gradle
buildscript {
// Other buildscript configurations
apply from : 'local-buildscript.gradle'
}
subproject {
if(file('local.gradle').exists()){
apply from: 'local.gradle'
}
}
// Other code of build.gradle
Root项目目录中的local-buildscript.gradle
project.buildscript { // NOTE it is project.buildscript
repositories {
maven {
url 'http://dl.bintray.com/niftystuff/pseudorepo'
}
}
dependencies {
classpath 'org.home:gradle-fladoodle-plugin:0.1'
}
}
请注意,您仍然没有将配置移至local.gradle
,但您正在创建自己的buildscript{}
gradle文件,您可以维护该文件。
希望这能解决您的问题。