Gradle: 如何在多项目构建中共享共同任务?

Gradle: How to share common tasks in multiproject build?

在我的根 build.gradle 文件中,我为所有组件应用了常见任务:

apply from: rootProject.file('common/component.gradle')

在子项目中我定义了componentTitle:

ext {
    componentTitle = 'application1'
 }

component.gradle:

jar {
    manifest {
        attributes 'Implementation-Title': componentTitle
    }
}

我遇到错误:

A problem occurred evaluating script.
> No such property: componentTitle for class: org.gradle.api.java.archives.internal.DefaultManifest

看来,您不仅将此通用配置应用于子项目,而且还应用于根项目,尽管它没有这样的 属性。要仅将其应用于子项目,可以这样配置:

subprojects {
    apply from: rootProject.file('/component.gradle')
}

但即使现在 Gradle 也不会找到 componentTitle 属性 如果您按照您的方式传递它(作为子项目脚本主体的一部分)。您需要在所有子项目目录中创建一个 gradle.properties 文件,并将此 属性 移动到此属性文件中,像往常一样:

componentTitle=application1

那么Gradle在配置阶段就可以定位到