我正在编写一个 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 来确定哪个方法是它的工作方法,然后直接调用它?还是有更通用的方法来实现我的目标?