gradle获取子对象名称,版本

时间:2018-11-07 08:10:29

标签: gradle

根项目build.gradle

subprojects {
    jar {
        manifest {
            attributes Name: project.archivesBaseName,
                    Version: project.version
        }
    }
}

子项目A build.gradle

archivesBaseName = 'AAA'
version = '1.0.1'

子项目B build.gradle

archivesBaseName = 'BBB'
version = '1.0.2'

我想要的是在根项目上运行gradlew build之后,在项目A和B的清单文件中,分别有Name: AAA Version: 1.0.1Name BBB version: 1.0.2。 但是我得到的是Name是项目的名称:A,而Version是unspecified ...

Name: A Version: unspecified

1 个答案:

答案 0 :(得分:2)

您需要将subproject配置闭包包装在projectsEvaluated回调闭包中:

gradle.projectsEvaluated {
    subprojects { subproject ->

        jar {
            manifest {
                attributes Name: subproject.archivesBaseName,
                        Version: subproject.version
            }
        }
    }
}

为什么?,因为在根父项目中执行subproject配置关闭时(在配置阶段),来自archiveBaseNameversion属性的值来自子项目尚未评估,因此清单属性的jar配置不正确。在评估完所有项目后,需要设置此配置==>为此使用projectsEvaluated生命周期挂钩。