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

iso*_*tel 9 multi-project gradle

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

apply from: rootProject.file('common/component.gradle')
Run Code Online (Sandbox Code Playgroud)

在子项目中我定义了componentTitle:

ext {
    componentTitle = 'application1'
 }
Run Code Online (Sandbox Code Playgroud)

component.gradle:

jar {
    manifest {
        attributes 'Implementation-Title': componentTitle
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

A problem occurred evaluating script.
> No such property: componentTitle for class: org.gradle.api.java.archives.internal.DefaultManifest
Run Code Online (Sandbox Code Playgroud)

Sta*_*lav 4

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

subprojects {
    apply from: rootProject.file('/component.gradle')
}
Run Code Online (Sandbox Code Playgroud)

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

componentTitle=application1
Run Code Online (Sandbox Code Playgroud)

然后 Gradle 将能够在配置阶段找到它