gpt4 book ai didi

gradle - Gradle 依赖和动态变量

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

请参阅以下情形:

def dynamic = "original value"

task stuffThatHasToBeDoneBefore << {
doSomething(dynamic)
}

task b (dependsOn: stuffThatHasToBeDoneBefore) {
dynamic = "value of task b that never will be used by stuffThatHasToBeDoneBefore-task"
}

task c (dependsOn: stuffThatHasToBeDoneBefore) {
dynamic = "value of task c"
}

我想在构建执行过程中多次使用stuffThatHasToBeDoneBefore-task来减少代码重复。

现在,无法执行任务b并确保将使用动态值(“task b的值将永远不会被stestThatHasToBeDoneBefore-task使用”)来预先执行stuffThatHasToBeDoneBefore-task,因为动态-变量值将在配置阶段被任务c覆盖(“任务c的值”)。

我看到的唯一方法是:
task b_alternative << {
dynamic = "value of task b that will be used in stuffThatHasToBeDoneBefore-task now"
tasks.stuffThatHasToBeDoneBefore.execute()
}

不幸的是,这只是一种解决方法,我在多个来源中读到,不建议使用task.taskname.execute()

谁能告诉我如何构造代码,以便我可以重新使用带有动态值的stuffThatHasToBeDoneBefore-task?

通常,我会使用一个简单的方法而不是一个任务,并将动态值作为参数传递,但是这是不可能的,因为stuffThatHasToBeDoneBefore-task是一个Zip类型的任务,只能作为任务使用,而不能作为方法。

最佳答案

解决您的问题的方法是使用custom task
您可以让您的自定义任务扩展ZipTask,并可以在其上定义一个自定义dynamic属性以及使用该属性的doSometing方法。然后,根据您希望执行的时间(在创建zip之前或之后),将doSomething添加到doFirstdoLast中。

您的构建脚本更具表现力:

// import MyCustomTask here
task b (type: MyCustomTask) {
dynamic = "value for task b"
}
task a (type: MyCustomTask) {
dynamic = "value for task a"
}

请注意, dynamic不再是构建脚本中的变量,它现在是自定义任务的属性。

关于gradle - Gradle 依赖和动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849221/

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