有時,你的 Plugin 的實現(xiàn)需要依賴其他第三方庫松捉,同時你希望別人在使用你的 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
中文件的內(nèi)容苞慢。
寫一個有默認依賴的 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'
- 監(jiān)聽
DataProcessing
任務英妓,將config
注入到DataProcessing
中挽放,這樣绍赛,執(zhí)行DataProcessing
時就可以打印config
中的內(nèi)容。
build.gradle
apply plugin: DataProcessingPlugin
repositories {
mavenCentral()
}
tasks.register("dataProcessing", DataProcessing) {
}
執(zhí)行 gradle dataProcessing
后辑畦,控制臺有如下輸出:
可見吗蚌,確實自動添加了依賴
'com.squareup.okhttp3:okhttp:3.3.1'
同時,我們可以通過
dependencies
來覆蓋 Plugin 中默認的依賴:
dependencies {
dataFiles 'com.squareup.okhttp3:okhttp:4.2.2'
}