gpt4 book ai didi

groovy - Gradle插件任务的共享@Input属性,最好是嵌套配置

转载 作者:行者123 更新时间:2023-12-03 03:51:28 26 4
gpt4 key购买 nike

我的gradle插件会生成许多具有共享配置的任务。此配置需要标记为@Input,因此更改它时,该任务将标记为陈旧并重新评估。我发现在将配置应用于多个任务时共享配置具有挑战性。我正在使用project.afterEvaluate来避免增量编译。此示例是我目前拥有的简化版本:

当前插件代码:

class MyPluginTaskOne extends DefaultTask {
@Input config = "default"
@TaskAction
public void action() {
// something that depends on config
}
}

class MyPluginTaskTwo extends DefaultTask {
@Input config = "default"
@TaskAction
public void action() {
// something that depends on config
}
}

class MyPluginExtension {
// blank for now
}

class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create("myPluginConfig", MyPluginExtension)
project.tasks.create(name: 'myPluginTaskOne', type: MyPluginTaskOne) {}
project.tasks.create(name: 'myPluginTaskTwo', type: MyPluginTaskTwo) {}
}
}

当前配置:

当前,我必须共享状态的最佳方法如下。问题在于它容易出错并且不会自动共享设置:
apply plugin: MyPlugin

// Kludgy way of sharing configuration across two tasks:
def sharedConfig = "SHARED-CONFIG"

myPluginTaskOne {
config sharedConfig
}

myPluginTaskTwo {
config sharedConfig
}

首选配置:

我想做的是类似以下的配置,但是具有跟踪@Input依赖项和最新测试的所有好处。
myPluginConfig {
config "SHARED-CONFIG"
// myPluginTaskOne and myPluginTaskTwo both gets automatic
// 'SHARED-CONFIG' through Gradle
}

看来您可以自动添加任务之间的依赖关系(见下文)。是否可以仅配置第一个任务,然后将@Input滴入第二个任务的@Input?

让我们尝试依靠CopySpec.from()如何使用Project.files()评估参数来删除任务依赖项。 Gradle可以自动为我们添加任务依赖项。这还将生成器任务的输出添加为zip任务的输入。

https://gradle.org/feature-spotlight-incremental-builds/

最佳答案

以马克的评论为基础。这是一个适用于所有任务并且不能被覆盖(配置)的属性的示例。

class MyPluginTaskOne extends DefaultTask {
@Input String getConfig() { project.myPluginConfig.config }
@TaskAction
public void action() {
// something that depends on config
}
}

class MyPluginTaskTwo extends DefaultTask {
@Input String getConfig() { project.myPluginConfig.config }
@TaskAction
public void action() {
// something that depends on config
}
}

class MyPluginExtension {
String config
}

class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.with {
extensions.create("myPluginConfig", MyPluginExtension)
tasks.create(name: 'myPluginTaskOne', type: MyPluginTaskOne) {}
tasks.create(name: 'myPluginTaskTwo', type: MyPluginTaskTwo) {}
}
}
}

关于groovy - Gradle插件任务的共享@Input属性,最好是嵌套配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840504/

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