我用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
自定义任务应如何声明其输入以正确利用最新检测?
1条答案
按热度按时间gmol16391#
看起来,gradle不会进行最新检测,除非同时存在输出目录。将此目录添加到任务后,它可以正确地仅在输入目录的内容发生更改时运行任务
正如@ThomasKläger所发现的,Gradle文档证实了这一点
还要注意,除非任务至少有一个任务输出,否则增量构建将无法工作