gpt4 book ai didi

groovy - 在一个Gradle任务中生成要由另一个Gradle任务操作的文件

转载 作者:行者123 更新时间:2023-12-03 03:15:44 24 4
gpt4 key购买 nike

在我上一个项目中来自Ant的时候,我第一次在Gradle上工作。到目前为止,我很喜欢自己所看到的内容,尽管我试图弄清楚如何做一些使我陷入困境的事情。我想知道在以下情况下使用什么正确的模式。

我有一系列文件,需要对其执行一些操作。每个任务都对之前任务的新生成的输出文件进行操作。我将尝试构造一个示例来说明我的问题,因为我的项目有些复杂且内部化。

第一阶段

首先,假设我有一个任务,必须写出100个单独的文本文件,每个文本文件中都有一个随机数。文件的名称无关紧要,可以说它们全部都存在于parentFolder下。

例:

parentFolder
|
|-file1
|-file2
...
|-file100

我认为我最初的想法是在自定义任务的doLast(以<<表示的快捷方式)关闭内部的循环中执行此操作-类似于:
task generateNumberFiles << {
File parentFolder = mkdir(buildDir.toString() + "/parentFolder")
for (int x=0; x<=100; x++)
{
File currentFile = file(parentFolder.toString() + "/file" + String.valueOf(x))
currentFile.write(String.valueOf(Math.random()))
}
}

第二阶段

接下来,假设我需要读取generateNumberFiles任务中生成的每个文件,并将每个文件压缩到另一个文件夹zipFolder中的单独存档中。为了简单起见,我将其放在parentFolder下,但是位置并不重要。

所需的输出:
parentFolder
|
|-file1
|-file2
...
|-file100
|-zipFolder
|
|-file1.zip
|-file2.zip
...
|-file100.zip

这似乎有问题,因为从理论上讲,这就像我需要为每个文件创建一个Zip任务(为每个文件生成一个单独的存档)。因此,我想这是问题的第一部分:如何创建一个单独的任务以对在先前任务期间生成的文件执行操作,并使该任务作为构建过程的一部分运行?

在执行时添加任务肯定是可能的,但是让任务运行似乎更成问题。我已经读过,不建议使用.execute(),从技术上讲,这是一种内部方法。

我还想到了将 dependsOn添加到带有 .matching { Task task -> task.name.startsWith("blah")}块的后续任务中。不过,这似乎不起作用,因为已解决了任务依赖性[在Gradle配置阶段] [1]。那么,由于配置时这些文件不存在,我该如何创建任务来处理这些文件?

第三阶段

最后,让我们复杂一点,说我需要对第二阶段中生成的ZIP存档执行一些其他自定义操作,这不是Gradle内置的。我想不出一个实际的例子,所以只能说我必须读取每个ZIP的第一个字节并将其上传到某个服务器上-这涉及到分别对每个ZIP进行操作。

第三阶段只是我第二阶段问题的延续。我觉得Gradle-y要做这种事情的方法是创建在每个文件上执行工作单元并使用某种依赖关系来使这些任务执行的任务。但是,如果构建依赖关系图时任务不存在,我该如何完成这种事情?另一方面,我是否完全不了解,还有其他方法可以做这种事情吗?

[1]:“Gradle在执行任何任务之前先构建完整的依赖关系图。” http://www.gradle.org/docs/current/userguide/build_lifecycle.html

最佳答案

您无法在执行阶段创建任务。您可能已经发现,由于Gradle在配置阶段构造了该任务执行图,因此您以后无法添加任务。

如果您只是想将一个任务的输出作为另一个任务的输入使用,那么它将变成一个简单的dependsOn关系,就像Ant一样。我相信您可能走错了路,是因为您认为需要为要创建的每个存档动态创建Gradle Zip任务。在这种情况下,由于您要创建的文件数量是动态的,基于另一个任务的输出(即在执行期间确定),因此您只需创建一个创建所有这些zip文件的任务即可。最简单的方法是通过Gradle的Ant support使用Ant的zip任务。

关于groovy - 在一个Gradle任务中生成要由另一个Gradle任务操作的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25676434/

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