访问gradle中非根项目中的字段

czq61nw1  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(133)

这看起来应该很简单,但我卡住了!我有一个gradle任务,压缩一些文件并创建一个归档。我想使用我所在项目的版本字符串作为归档名称的后缀(这是多项目构建中的子项目)
在同一个build.gradle文件中还有另一个任务可以访问此版本字段,我也想访问该字段。

task releasePublishAuto(dependsOn: [tasks.cppApiVersion, rootProject.tasks.releasePublish]) {
    doLast {
        println("############################################################")
        println("# PUBLISHED CPP API WITH VERSION: $version")
        println("############################################################")
    }
}

你可以看到它访问version变量并使用$version打印它。它打印类似# PUBLISHED CPP API WITH VERSION: 1.256.4-SNAPSHOT的内容
现在,我的任务是压缩任务,所以有点不同:

task zipGeneratedCppClientApi(type: Zip, group: "code generator", dependsOn: [tasks.cppApiVersion, "generateCormorantCPP"]) {
    from(fileTree(dir: "$buildDir/generated/cormorant_cpp", include: "**/*"))
    archiveFileName = "$buildDir/distributions/generated-cpp-api-$version"
}

我本以为这会创建一个名为generated-cpp-api-1.256.4-SNAPSHOT的zip文件,但得到的却是一个名为generated-cpp-api-null的zip文件。(或诸如此类),不是当前项目的版本。我尝试访问rootproject.version,但也是null -这不是根项目,而是其子项目!
如何在gradle中访问此非根项目中的版本字段?
澄清一下:如果我从任务中删除type:zipversion会指向正确的值,但如果没有type:zip,它就不会创建zip文件,所以不是很有帮助。

dojqjjoe

dojqjjoe1#

在Zip任务的上下文中,version属性引用AbstractArchiveTask.version属性,正如您所猜测的,而不是当前项目版本属性。正如您所看到的,此version属性在AbstractArchiveTask类中已被弃用,可能是为了避免此类混淆。
要使用项目版本,只需使用${project.version},如下例所示。
在子项目生成脚本中:

version="1.0.0"
tasks.register('packageDistribution', Zip) {
    println("version from AbstractArchiveTask : $version") // => here, version will be null
    println("version from project: ${project.version}")   //  => here, version will be "1.0.0" as expected
    archiveFileName = "my-distribution-${project.version}.zip"  // => my-distribution-1.0.0.zip  as expected
    destinationDirectory = layout.buildDirectory.dir('dist')

    from layout.projectDirectory.dir("src/dist")
}

相关问题