为什么我的自定义Gradle任务即使在输入未更改时也在运行

i34xakig  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(113)

我用Java创建了一个自定义Gradle任务(只是放在buildSrc中,因此是一个本地自定义任务)

public class ImageMergerTask extends DefaultTask{
    public File directory;

    @TaskAction
    public void greet() {
        System.out.println("hello from ImageMergerTask " + directory.toString());
    }

    @InputDirectory
    public File getDirectory(){
        return directory;
    }

    public void setDirectory(File directory){
        this.directory = directory;
    }
}

在构建中使用。类似于gradle

task imageMerger(type : ImageMergerTask) {
    directory file('src/main/resources/someFolder')
}

processResources.dependsOn(imageMerger);

我的印象是,通过使用@InputDirectory注解getDirectory(),它应该只在src/main/resources/someFolder的内容发生变化时才运行此任务,但它似乎每次都运行,总是包括在控制台中:

> Task :imageMerger
hello from ImageMergerTask C:\Users\richa\Documents\Development\starlight\src\main\resources\someFolder

自定义任务应如何声明其输入以正确利用最新检测?

gmol1639

gmol16391#

看起来,gradle不会进行最新检测,除非同时存在输出目录。将此目录添加到任务后,它可以正确地仅在输入目录的内容发生更改时运行任务

@OutputDirectory
public File getOutDirectory(){
    return new File(getProject().getBuildDir(), "someFolder");
}

正如@ThomasKläger所发现的,Gradle文档证实了这一点
还要注意,除非任务至少有一个任务输出,否则增量构建将无法工作

相关问题