gpt4 book ai didi

java - 应如何将配置从 Gradle 扩展传递给 Gradle Task?

转载 作者:行者123 更新时间:2023-12-05 05:49:28 24 4
gpt4 key购买 nike

我正在创建一个 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注解是属于扩展的属性还是属于任务?

最佳答案

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

扩展是为用户提供设置。

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

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

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

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

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

关于java - 应如何将配置从 Gradle 扩展传递给 Gradle Task?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70661787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com