Ram*_*tra 15 gradle build.gradle
我正在尝试使用gradle执行以下任务的命令:
task stopServer(dependsOn: war, type: Exec) << {
commandLine 'pkill -9 tomcat'
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
* What went wrong:
Execution failed for task ':stopServer'.
> execCommand == null!
Run Code Online (Sandbox Code Playgroud)
当我的任务是这样的:
task stopServer(dependsOn: war) << {
exec {
commandLine 'pkill -9 tomcat'
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
* What went wrong:
Execution failed for task ':stopServer'.
> A problem occurred starting process 'command 'pkill -9 tomcat''
Run Code Online (Sandbox Code Playgroud)
你能告诉我在这些方法中我哪里出错吗?
如果上述两种方法都不是正确的执行方式,那么请用一个例子来说明这样做的方法.
Pau*_*ips 22
我相信你在寻找这个:
task stopServer(dependsOn: war, type: Exec) {
commandLine "pkill", " -9", "tomcat"
}
Run Code Online (Sandbox Code Playgroud)
主要区别非常微妙 - 我刚刚删除了两个字符.在<<从任务定义了.另一个区别是,commandLine期望可执行文件与其参数分开传递.
我删除了<<因为gradle中的一个重要想法:构建生命周期.有配置和执行阶段(这不是全部,但足以解释这一点).
这<<就像说doLast- 它将您传递的闭包添加到此任务的操作(执行阶段)的末尾.所以这意味着在这里,它将尝试像普通一样执行命令(Exec毕竟它是一个对象),只有这样,一旦它被执行,它将调用你的块 - 块设置commandLine.因此,当它正在执行时,execCommand实际上是null,并且直到你的块运行.这是你问题的核心.
如果没有<<(也称为左移),则在配置阶段运行相同的块.因此exec命令在运行之前就会被设置,并且它可以工作.
| 归档时间: |
|
| 查看次数: |
29982 次 |
| 最近记录: |