【发布时间】:2022-01-11 04:51:56
【问题描述】:
我正在创建一个带有相应对象的 Gradle 插件,以便在 Groovy DSL 中使用。我对差异和扩展以及任务以及如何在两者之间传递配置以及应该放置输入和输出注释的位置感到困惑。这是我的任务
abstract public class UrlVerify extends DefaultTask {
@Input
abstract public Property<String> getUrl();
@TaskAction
public void verify() {
System.out.println(getUrl().get().toString());
}
}
这是扩展名
abstract public class UrlVerifierExtension {
abstract public Property<String> getUrl();
abstract public Property<Configuration> getConfiguration();
abstract public Property<Boolean> getIgnoreFailures();
public Set<ConflictCategory> getIncludeCategories() {
return includeCategories;
}
}
这个插件只接受一个 URL 并对其进行验证。
verification {
url = 'https://www.moooooereee.com/'
configuration = configurations.runtimeClasspath
ignoreFailures = false
}
我有以下插件。我需要手动将 URL 从扩展程序传递给任务,并想知道这是否是正确的方法?
public class UrlVerifierPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getPluginManager().apply(JavaLibraryPlugin.class);
UrlVerifierExtension extension = project.getExtensions().create("verification", UrlVerifierExtension.class);
UrlVerify verifyUrlTask = project.getTasks().create("verifyUrl", UrlVerify.class);
verifyUrlTask.getUrl().set(extension.getUrl());
}
}
除此之外,还不清楚@Input注解是属于扩展的属性还是属于任务的属性?
【问题讨论】:
-
According to the documentation 是的,这是正确的方法,
@Input继续任务属性
标签: java gradle groovy build.gradle gradle-plugin