Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle exec任务始终运行,即使输入=输出_Gradle - Fatal编程技术网

Gradle exec任务始终运行,即使输入=输出

Gradle exec任务始终运行,即使输入=输出,gradle,Gradle,我有一个创建目录的简单gradle任务 task foo(type: Exec) { inputs.dir 'foo' outputs.dir 'foo' commandLine 'mkdir', 'foo' } 问题是每次我运行任务foo时,它都会运行。我希望它第一次运行,然后意识到目录存在,就不会再运行了。我错过了什么 另外,当foo目录不存在时,这在第一时间是如何工作的呢?这里有一个简单的解决方案。 在任务中使用groovy脚本创建文件夹 task foo {

我有一个创建目录的简单gradle任务

task foo(type: Exec) {
    inputs.dir 'foo'
    outputs.dir 'foo'

    commandLine 'mkdir', 'foo'
}
问题是每次我运行任务foo时,它都会运行。我希望它第一次运行,然后意识到目录存在,就不会再运行了。我错过了什么


另外,当foo目录不存在时,这在第一时间是如何工作的呢?

这里有一个简单的解决方案。 在任务中使用groovy脚本创建文件夹

task foo {
    def folder = new File("foo")

    // If it doesn’t exist, create a directory.
    if( !folder.exists() ) {
        folder.mkdirs()
    }
}
该方法说明如下:

在给定目录下找到的所有文件都被视为此任务的输入文件

因此,我猜目录是否存在只是不检查,而只检查目录中的文件是否更改

然而,有一个简单的解决办法。只需在任务上使用onlyIf闭包来指定何时跳过它:

task foo(type: Exec) {
    onlyIf { file('foo').exists() }

    commandLine 'mkdir', 'foo'
}
在我的示例中,我只使用了一个Exec任务来尽可能地接近您的问题,但请注意,Gradle确实提供了一种方法,与调用命令行工具相比,它应该更受欢迎。请记住在doFirst或doLast闭包中执行它,因为它将在配置阶段被调用


另外请注意,Gradle将自行为复制任务等创建所有必要的目录,因此仅在极少数情况下需要手动创建目录。

这只是一个猜测,但每当您运行任务时${buildDir}/venv changes莫名其妙地触碰?,因此输入更改和计划运行的任务。不将venv保留在buildDir下如何?如果我背对背运行任务,则会发生这种情况,因此venv中的任何内容都不会发生变化,可能不是内容,而是元数据。我将其更改为完全不同的目录,并获得相同的结果请使用-I运行以验证是什么触发了任务。这甚至不会在执行阶段执行,但是在配置阶段,任务是完全没有意义的。@LukasKörfer我不知道你为什么说它没有意义。问题不在于配置阶段或执行阶段。任务闭包中的代码将被执行,而与正在执行的任务无关。将代码段发布到build.gradle文件中,只需调用gradle而不指定任何任务,即可创建文件夹。但是任务本身不会做任何事情,因此我称之为毫无意义。我原来的问题被修改为简化它正在做的事情。真正的问题是,我想创建一个Python venv,我的任务每次都试图重新创建venv,即使我背靠背地运行gradle任务。