gradle 在影响 root 的子模块中有条件地应用插件 w/o?
gradle apply plugin conditionally in sub-modules w/o affecting root?
我正在修改 'local.gradle' 的概念,如果 local.gradle 存在,可以 add/extend 为子项目提供 build.gradle。简单示例:
if(file('local.gradle').exists()){
apply from: 'local.gradle'
}
这工作正常,可以美化本地构建,但不能 'clog' 使用来自工作站等的 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 中的任务和内容并不是 'know' 关于多项目构建和根构建文件的内容; tasks.getByPath(':somesub:somejar') 之类的东西在 local.gradle 中似乎没有意义。
所以我将用于定位插件的构建脚本内容移到了根目录;靠近(实际上是在)根构建中声明其他插件依赖项的部分。 local.gradle 只是有一个应用,然后是那个插件的 gradle 东西;一切都很好,绝对路径的东西现在似乎正在工作。我没有在根 setting.gradle 中包含对 local.gradle 的任何引用...我也不想...
但是,现在我在根目录 build.gradle 中有一些东西确实不属于那里——因为根目录永远不会知道子目录是否会有 local.gradle。注意:buildscript 的东西不在 allprojects{ } 或 subprojects {} 中——所以它真的不能问我正在处理的当前 sub 的问题,是否有 local.gradle;如果是这样,将新的 Maven 存储库添加到 buildscript { } 以解析可能在 local.gradle 中使用的插件(此外,root 应该真的不需要知道本地文件是否希望应用其他插件 - 只是闻起来像耦合不良)。
因此,有条件地包含 'local.gradle' 文件是否会以某种方式影响插件 "apply from" 依赖关系 w/o 必须泄露此信息进入构建的其他地方(即根目录)?
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
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 文件,您可以维护它。
希望这能解决您的问题。
我正在修改 'local.gradle' 的概念,如果 local.gradle 存在,可以 add/extend 为子项目提供 build.gradle。简单示例:
if(file('local.gradle').exists()){
apply from: 'local.gradle'
}
这工作正常,可以美化本地构建,但不能 'clog' 使用来自工作站等的 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 中的任务和内容并不是 'know' 关于多项目构建和根构建文件的内容; tasks.getByPath(':somesub:somejar') 之类的东西在 local.gradle 中似乎没有意义。
所以我将用于定位插件的构建脚本内容移到了根目录;靠近(实际上是在)根构建中声明其他插件依赖项的部分。 local.gradle 只是有一个应用,然后是那个插件的 gradle 东西;一切都很好,绝对路径的东西现在似乎正在工作。我没有在根 setting.gradle 中包含对 local.gradle 的任何引用...我也不想...
但是,现在我在根目录 build.gradle 中有一些东西确实不属于那里——因为根目录永远不会知道子目录是否会有 local.gradle。注意:buildscript 的东西不在 allprojects{ } 或 subprojects {} 中——所以它真的不能问我正在处理的当前 sub 的问题,是否有 local.gradle;如果是这样,将新的 Maven 存储库添加到 buildscript { } 以解析可能在 local.gradle 中使用的插件(此外,root 应该真的不需要知道本地文件是否希望应用其他插件 - 只是闻起来像耦合不良)。
因此,有条件地包含 'local.gradle' 文件是否会以某种方式影响插件 "apply from" 依赖关系 w/o 必须泄露此信息进入构建的其他地方(即根目录)?
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
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 文件,您可以维护它。
希望这能解决您的问题。