有时,你的 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 中添加一个名为
dataFiles
的 Configuration。 - 为
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
后,控制台有如下输出:
可见,确实自动添加了依赖
'com.squareup.okhttp3:okhttp:3.3.1'
同时,我们可以通过
dependencies
来覆盖 Plugin 中默认的依赖:
dependencies {
dataFiles 'com.squareup.okhttp3:okhttp:4.2.2'
}
网友评论