【问题标题】:How should configuration be passed to Gradle Task from a Gradle extension?如何将配置从 Gradle 扩展传递给 Gradle Task?
【发布时间】: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注解是属于扩展的属性还是属于任务的属性?

【问题讨论】:

标签: java gradle groovy build.gradle gradle-plugin


【解决方案1】:

您似乎非常精确地遵循了 Gradle 文档中的示例。这是配置自定义任务的正确方法。扩展的确切目的是拥有用户提供的设置,然后您的插件使用这些设置来配置它和任务。

扩展是供用户提供设置的。

任务用于在 Gradle 运行时执行操作。

@Input 注解被 Gradle 用来确定任务是否需要运行。如果任务之前没有运行过,或者输入值自上次执行后发生了变化,则任务将再次运行。

输出声明了运行任务产生的一些结果。一个示例是编译 Java 文件的任务。输出将是编译过程产生的类文件。如果输出文件被创建它们的任务以外的其他东西修改或删除,则创建它们的任务已过期,Gradle 将再次运行它。

此外,一个任务可以将另一个任务的输出声明为其输入。如果任务 A 创建了一些输出文件,而任务 B 使用任务 A 的输出作为输入,那么任务 B 将在任务 A 更新或创建其文件时运行。

在您使用 @Input 注释的情况下,我的猜测是您不希望在这种情况下这样做,因为它告诉 Gradle 您的任务只需要运行一次,然后只有在用户更新设置的情况下.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2018-04-28
    相关资源
    最近更新 更多