在子项目中继承 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 - jCentermavenCentral 的超集并且是首选