美文网首页
Gradle —— 自定义 Plugin(4):添加默认依赖

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

作者: 你可记得叫安可 | 来源:发表于2019-12-20 16:19 被阅读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));
        }
    }
    
    • 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):添加默认依赖

          本文链接:https://www.haomeiwen.com/subject/aybbnctx.html