Gradle —— 自定义 Plugin(4):添加默认依赖

2019-12-20  本文已影响0人  你可记得叫安可

有时,你的 Plugin 的实现需要依赖其他第三方库,同时你希望别人在使用你的 Plugin 时不用再显式地提供这个三方库的依赖,Plugin 自带一个默认依赖。


打印依赖信息的 Task
public class DataProcessing extends DefaultTask {
    private final ConfigurableFileCollection dataFiles;

    public DataProcessing() {
        dataFiles = getProject().files();
    }

    @InputFiles
    public FileCollection getDataFiles() {
        return dataFiles;
    }

    public void setDataFiles(FileCollection dataFiles) {
        this.dataFiles.setFrom(dataFiles);
    }

    @TaskAction
    public void process() {
        System.out.println(getDataFiles().getFiles());
    }
}

DataProcessing 任务的工作就是打印 dataFiles 中文件的内容。

写一个有默认依赖的 Plugin
public class DataProcessingPlugin implements Plugin<Project> {
    @Override
    public void apply(Project target) {
        final Configuration config = target.getConfigurations().create("dataFiles")
                .setVisible(false)
                .setDescription("The data artifacts to be processed for this plugin");

        config.defaultDependencies(dependencies ->
                dependencies.add(target.getDependencies().create("com.squareup.okhttp3:okhttp:3.3.1")));

        target.getTasks()
                .withType(DataProcessing.class)
                .configureEach(dataProcessing -> dataProcessing.setDataFiles(config));
    }
}
build.gradle
apply plugin: DataProcessingPlugin

repositories {
    mavenCentral()
}

tasks.register("dataProcessing", DataProcessing) {

}

执行 gradle dataProcessing 后,控制台有如下输出:

dataProcessing.png
可见,确实自动添加了依赖 'com.squareup.okhttp3:okhttp:3.3.1'
同时,我们可以通过 dependencies 来覆盖 Plugin 中默认的依赖:
dependencies {
    dataFiles 'com.squareup.okhttp3:okhttp:4.2.2'
}
上一篇 下一篇

猜你喜欢

热点阅读