gpt4 book ai didi

gradle - 基本Gradle复制任务不起作用(直到直接调用)

转载 作者:行者123 更新时间:2023-12-03 04:51:00 25 4
gpt4 key购买 nike

我有一个简单的Gradle脚本:

task copyall(){
println 'starting...'
task copyA(type: Copy) {
mkdir 'web'
from 'src'
into 'web'
}
}

它的行为很奇怪:如果我从命令行调用“gradle copyall”,它会创建目录,但不会将文件从“src”复制到“web”文件夹。
如果我从命令行直接调用task.copyA(“gradle copyA”)-它既可以制作目录又可以复制文件(带有子文件夹)。

为什么task.copyA仅部分作为task.copyall的子任务执行?

最佳答案

好吧,我知道为什么您的Gradle脚本会按照您描述的方式运行,但是出于各种原因却会如此。

首先,Gradle中没有子任务。您可以创建任务,也可以定义任务之间的依赖关系。因此,如果仅自己定义任务copyA(建议的方式),则它就是完全相同的事情:

task copyAll {
println 'starting...'
}

task copyA(type: Copy) {
mkdir 'web'
from 'src'
into 'web'
}

现在您有两个任务,但是任务 copyAll根本不执行任何操作。甚至您的 println语句也不是,任务是什么,而是它的配置方式:

执行构建脚本时,Gradle有两个主要阶段: 配置阶段执行阶段。整个构建脚本将在配置阶段进行评估(执行),并且只有任务 Action (例如,复制 Copy任务),所选任务的 doFirstdoLast关闭将在执行阶段执行。根据命令行参数和任务相关性确定所选任务。

结论是,配置任务 'starting ...'时将打印 copyAll输出,而不是在启动时输出!

最后但并非最不重要的一点是, mkdir命令引起困惑,因为它不是 Copy 任务的一部分,而是 Project实例的 method。它在被调用时直接执行,因此在您的情况下直接在配置阶段,完全独立于任何任务执行。每次执行Gradle都会执行它。

但是,听到一些好消息,您根本不需要它。 Copy任务将自行创建所有必需的目标目录。

现在,从上面总结所有要点,我们提出了以下构建脚本:
task copyAll {
dependsOn 'copyA'
}

task copyA(type: Copy) {
from 'src'
into 'web'
}

关于gradle - 基本Gradle复制任务不起作用(直到直接调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234514/

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