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

有时,你的 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 {
    @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));
    }
}
  • Project 中添加一个名为 dataFilesConfiguration
  • dataFiles 配置相应的依赖:'com.squareup.okhttp3:okhttp:3.3.1'
  • 监听 DataProcessing 任务,将 config 注入到 DataProcessing 中,这样,执行 DataProcessing 时就可以打印 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'
}

你可能感兴趣的:(Gradle —— 自定义 Plugin(4):添加默认依赖)