用Gradle执行命令?

用Gradle执行命令?,gradle,build.gradle,Gradle,Build.gradle,我正在尝试使用gradle执行命令,任务如下: task stopServer(dependsOn: war, type: Exec) << { commandLine 'pkill -9 tomcat' } 当我的任务是这样的: task stopServer(dependsOn: war) << { exec { commandLine 'pkill -9 tomcat' } } 你能告诉我在这些方法中我哪里出错了吗 如果以

我正在尝试使用gradle执行命令,任务如下:

task stopServer(dependsOn: war, type: Exec) << {
    commandLine 'pkill -9 tomcat'
}
当我的任务是这样的:

task stopServer(dependsOn: war) << {
    exec {
        commandLine 'pkill -9 tomcat'
    }
}
你能告诉我在这些方法中我哪里出错了吗


如果以上两种方法都不正确,请用一个例子说明执行方法。

我相信您正在寻找:

task stopServer(dependsOn: war, type: Exec) {
     commandLine "pkill", " -9", "tomcat"
}

主要的区别是非常微妙的-我刚刚删除了两个字符。如果您有一个独立的exec任务,您希望从命令行运行,但不希望作为构建的一部分在Android Studio中运行,那么这里的
是另一个解决方案,可以很好地解决相同的错误

这将始终运行“myExecTask”的配置,但仅在通过“gradle myExecTask”显式运行时才执行doMyExecTask

/**
*在doLast阶段实际运行exec任务
*/

task doMyExecTask这不太适合作为我答案的一部分,但我真的不认为您想要
pkilljava
。这将杀死任何java进程,包括您的IDE,并可能杀死gradle本身。我将其更改为
tomcat
,以防任何人仍面临此问题,我已将面临此问题的dx命令更改为包含如下所示的“.bat”,它开始工作
commandLine'sdk/dx.bat'--dex
我尝试了您的解决方案,但没有成功,我遇到了此错误
>启动进程'command'pkill-9 java''时出现问题。
命令行语法中还有一个错误。参数必须与可执行文件分开。我用编辑更新了。您的解决方案适用于例如
命令行'catalina.sh','run'
,但不适用于
命令行'pkill','-9','tomcat'
。有什么原因吗?如果一个有效,而另一个无效,那么很可能是您尝试运行的shell命令有问题。尝试在shell中自己运行该命令,看看它是否有效。或者用--debug或者--stacktraceI运行gradle,我必须说,这是一个很好的答案。我到处都找过了,但在这之前我还没弄清楚。谢谢
* What went wrong:
Execution failed for task ':stopServer'.
> A problem occurred starting process 'command 'pkill -9 tomcat''
task stopServer(dependsOn: war, type: Exec) {
     commandLine "pkill", " -9", "tomcat"
}
/**
 * Actually run exec task in doLast phase
 */
task doMyExecTask << {
    def hasProperties = project.hasProperty('SOME_PROPERTY');

    if (hasProperties) {
        myExecTask.commandLine "echo", "$SOME_PROPERTY"
    } else {
        println "ERROR: Unable to run task. Missing properties."
    }
}

/**
 * Configure exec task, this always runs
 */
task myExecTask(type: Exec) {
    dependsOn doMyExecTask
    workingDir 'path/to/executable'
}