gpt4 book ai didi

Gradle:每个子项目的通用 Zip 任务

转载 作者:行者123 更新时间:2023-12-03 04:52:53 26 4
gpt4 key购买 nike

我有一个多项目 gradle 构建,其中根项目的所有子项目都有共同的 zip 任务。他们应该压缩一些源代码,这取决于子项目的设置。

首先,我在父级 build.gradle 中配置了它:

subprojects { subproject ->
apply plugin: 'java'
...

task submission(type: Zip) {
destinationDir = subproject.buildDir
archiveName = subproject.name

from subproject.ext.submissionFiles
}
}

但这不适用于 Cannot get property 'submissionFiles' on extra properties extension as it does not exist .所以我在每个子项目的 build.gradle 中移动了任务,这打破了 DRY 原则。

我认为问题在于配置阶段发生在配置子项目之前。如何“推迟”此任务的配置,以便我只配置 ext.submissionFiles在子项目中?

最佳答案

我想你是在说 submissionFiles是在子项目的 build.gradle 中设置的吗?

有几种方法可以做到。

选项 1. 您可以推迟对 subproject.ext.submissionFiles 的评估将其包裹在 closure 中:

task submission(type: Zip) { 
destinationDir = subproject.buildDir
archiveName = subproject.name

from ({ subproject.ext.submissionFiles })
}

选项2,我觉得如果不使用中间变量(submissionFiles),直接在children中配置提交任务会更好:
// In root
task submission(type: Zip) {
destinationDir = subproject.buildDir
archiveName = subproject.name
}

// In child
submission {
from("path/to/files")
}

使用这样的中间变量来移动配置会使您的构建更难理解任务之间的联系。

选项 3。在某些情况下,使用 evaluationDependsOnChildren() 是有意义的。 ,但我一般不会推荐它。

关于Gradle:每个子项目的通用 Zip 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28396410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com