在子项目中继承 gradle 插件
Inheriting gradle plugin in subprojects
我想避免冗余,因此我得到了一个 "shared" 项目,其中包含如下所示:
plugins {
id "org.flywaydb.flyway" version "4.2.0"
}
repositories {
mavenCentral()
jcenter()
}
apply plugin: "java"
dependencies {
compile "commons-io:commons-io:2.4"
// ...
}
然后我的常规项目也像这样从我的共享项目继承编译依赖项:
apply plugin: "java"
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile project(":shared")
testCompile project(":shared")
}
有什么方法可以让我的常规项目继承插件块或实际插件吗?
不是继承。在我看来,你想要做的事情可以通过从根项目配置子项目来实现。基本上在你的根 build.gradle
(将配置你的根项目的脚本)你可以写:
subprojects {
// configuration
}
您或许可以删除您的共享项目并将其放入根项目的 build.gradle
:
plugins {
id "org.flywaydb.flyway" version "4.2.0" apply false
}
subprojects {
repositories {
mavenCentral()
jcenter()
}
apply plugin: "java"
apply plugin: "org.flywaydb.flyway"
dependencies {
compile "commons-io:commons-io:2.4"
// ...
}
}
这样您的所有子项目都将使用相同的闭包进行配置 - 这相当于将 subprojects
块中的所有内容复制粘贴到您的各个子项目的 build.gradle
文件中。与您的初始解决方案相比的优势在于还能够应用插件、配置扩展以及您通常可以做的一切。
作为旁注,您不需要在 repositories
块中同时使用 jcenter()
和 mavenCentral
- jCenter
是 mavenCentral
的超集并且是首选
我想避免冗余,因此我得到了一个 "shared" 项目,其中包含如下所示:
plugins {
id "org.flywaydb.flyway" version "4.2.0"
}
repositories {
mavenCentral()
jcenter()
}
apply plugin: "java"
dependencies {
compile "commons-io:commons-io:2.4"
// ...
}
然后我的常规项目也像这样从我的共享项目继承编译依赖项:
apply plugin: "java"
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile project(":shared")
testCompile project(":shared")
}
有什么方法可以让我的常规项目继承插件块或实际插件吗?
不是继承。在我看来,你想要做的事情可以通过从根项目配置子项目来实现。基本上在你的根 build.gradle
(将配置你的根项目的脚本)你可以写:
subprojects {
// configuration
}
您或许可以删除您的共享项目并将其放入根项目的 build.gradle
:
plugins {
id "org.flywaydb.flyway" version "4.2.0" apply false
}
subprojects {
repositories {
mavenCentral()
jcenter()
}
apply plugin: "java"
apply plugin: "org.flywaydb.flyway"
dependencies {
compile "commons-io:commons-io:2.4"
// ...
}
}
这样您的所有子项目都将使用相同的闭包进行配置 - 这相当于将 subprojects
块中的所有内容复制粘贴到您的各个子项目的 build.gradle
文件中。与您的初始解决方案相比的优势在于还能够应用插件、配置扩展以及您通常可以做的一切。
作为旁注,您不需要在 repositories
块中同时使用 jcenter()
和 mavenCentral
- jCenter
是 mavenCentral
的超集并且是首选