gpt4 book ai didi

plugins - 在 gradle 中重用 Exec 任务进行常见命令行操作的最合适方法是什么?

转载 作者:行者123 更新时间:2023-12-03 00:21:35 24 4
gpt4 key购买 nike

我正在编写一个 gradle 构建文件,它将为我们的产品安装基本开发域。本质上,所有真正的代码都将位于自定义插件和自定义任务中。涉及的几个步骤相当重复(多个 sudo 调用、多个用户添加),我想将常见的内容封装到一个任务中。

例如:

task('addDBUser', type:AddUser) {
username = joeUser
}

task('startService', type:SudoExec) {
workingDir = "not/too/relevant"
commandLine = "/etc/init.d/coolService start"
}

我想尽可能整齐地重用 Exec 为我提供的各种功能(stdin、stdout 等),同时自动提供样板文件(“sudo ...”)。我很确定我可以扩展 Exec 而不是 DefaultTask,但我不知道触发实际操作的标准方法。根据我的需要修改 commandLine 属性似乎很容易,但是当我希望 Exec 真正运行时,没有通用的“run()”或类似的东西可以使用。

我是否要打开Exec来识别哪个方法是它的工作方法,然后直接调用它?或者有更通用的方法来实现我的目标吗?

最佳答案

要查看某个任务执行了哪个方法,您可以检查 Exec 的源代码并搜索标有 @TaskAction 的方法。事实证明,这是 exec() 方法,但一般来说,您不想手动调用任务操作,而是让 Gradle 为您完成。我认为最好的想法是将方法/ setter 添加到您的自定义任务中。它可能看起来像这样:

task addUser(type: AddUser) {
username = 'fromGradle'
}


class SudoExec extends Exec {

void sudoCommand(Object... arguments) {
executable 'sudo'
args = arguments.toList()
}
}

class AddUser extends SudoExec {

void setUsername(String username) {
sudoCommand('useradd', username)
}
}

关于plugins - 在 gradle 中重用 Exec 任务进行常见命令行操作的最合适方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16108058/

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