如何将Gradle插件中的任务执行链接到另一个插件的输出文件?

问题描述

我正在尝试为Gradle编写一个插件,该插件将执行某些任务,并执行另一个任务(在另一个插件-java-library-distribution中定义)。我可以通过任务类中的this.getProject().getTasks().getByName("distZip").getOutputs().getFiles().getSingleFile()轻松获取所需的文件。

但是,采用这种方法,我的任务将在每次执行,而不管高级任务中的文件是否已更改。

我将getter方法注释为@InputFile。但是不幸的是Gradle仍然没有将问题标记为UP-TO-DATE

public class YcfPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.getExtensions().create("ycf",YcfPluginExtension.class);
        project.getPluginManager().apply("java-library-distribution");

        project.getTasks().register("ycfCreateVersion",YcfTaskCreateVersion.class);
    }
}
abstract class YcfTask extends DefaultTask {
    public static final String TASK_GROUP = "Some Description";
    YcfPluginExtension ycfExtension = this.getProject().getExtensions().getByType(YcfPluginExtension.class);
    Logger logger = this.getProject().getLogger();

    public YcfTask() {
        this.setGroup(TASK_GROUP);   
    }
}
public class YcfTaskCreateVersion extends YcfTask {
    private File fi;

    public YcfTaskCreateVersion() {
        this.setDescription("Some description");
        this.dependsOn(this.getProject().getTasks().getByName("distZip"));

    }

    @InputFile
    public File getFi() {
        return this.getProject().getTasks().getByName("distZip").getOutputs().getFiles().getSingleFile();
    }
    @TaskAction
    public void run() {
        byte[] bytes = Files.readAllBytes(getFi().toPath());
        //..do something with file content
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)