Plugins gradle在子模块中有条件地应用插件,而不影响根?
我正在修补“local.gradle”的概念,如果存在local.gradle,它可以为子项目添加/扩展build.gradle。简单的例子:Plugins gradle在子模块中有条件地应用插件,而不影响根?,plugins,gradle,Plugins,Gradle,我正在修补“local.gradle”的概念,如果存在local.gradle,它可以为子项目添加/扩展build.gradle。简单的例子: if(file('local.gradle').exists()){ apply from: 'local.gradle' } 这可以正常工作,可以修饰本地构建,但不能用工作站上的goop等“阻塞”我们的连续构建 问题是,我的一个本地.gradle文件想要使用这样的插件: apply plugin: 'fladoodle' buildscri
if(file('local.gradle').exists()){
apply from: 'local.gradle'
}
这可以正常工作,可以修饰本地构建,但不能用工作站上的goop等“阻塞”我们的连续构建
问题是,我的一个本地.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插件;一切都很好,绝对路径的东西似乎正在发挥作用。我没有在根设置中包含对local.gradle的任何引用。gradle…我也不想太
但是,现在我在root build.gradle中有了一些不属于那里的东西——因为root永远不会知道sub是否有local.gradle。注意:buildscript内容不在所有项目{}或子项目{}中——因此它确实不能问我正在处理的当前子项目的问题,是否有local.gradle;如果是这样的话,在buildscript{}中添加一个新的maven repo来解析一个可能在local.gradle中使用的插件(而且,根用户不需要知道本地文件是否希望应用额外的插件——这听起来像是坏耦合)
因此,有条件包含的“local.gradle”文件是否会影响插件“apply from”依赖项,而不必将此信息泄漏到构建的其他位置(即根目录)?
buildscript{}
仅适用于多项目渐变生成中的根项目buildscript{}
块中;
您可以尝试下面的方法,将插件的依赖项从公共buildscript{}
配置中分离出来build.gradle
根项目目录中的本地buildscript.gradle
请注意,您仍然没有将配置移动到local.gradle
,而是为buildscript{}
创建您自己的gradle文件,您可以维护该文件
希望这能解决您的问题。如果我理解正确1。您希望有条件地应用
local.gradle
。2.local.gradle应用某个存储库中提供的自定义插件。您希望插件的依赖项定义和apply plugin
语句在local.gradle
中都正确吗?是。你说得很对。当我在local.gradle中有插件的DEP时;有些事情不太对劲:格拉德尔腹肌路径似乎没有解决。把DEP移到根上--使它正常运作--但有点违背了本地的想法。格雷德尔也许我在树上吠叫..花了一段时间才回到这个问题上--但你的建议似乎对我有用。唯一的调整是我在根目录的buildscript{}块中添加了if(file('local-buildscript.gradle').exists(){apply from:'local buildscript.gradle'})。local-buildscript.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
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'
}
}