2014-11-23 3 views
8

나는 아래의 작업에 Gradle을 가진 명령을 실행하려고 : 나는 그것을 실행하면Gradle로 명령을 실행 하시겠습니까?

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

내가받을 다음과 같은 오류 :

:

* What went wrong: 
Execution failed for task ':stopServer'. 
> execCommand == null! 

그리고 내 작업은 다음과 같은 경우

* What went wrong: 
Execution failed for task ':stopServer'. 
> A problem occurred starting process 'command 'pkill -9 tomcat'' 
:
task stopServer(dependsOn: war) << { 
    exec { 
     commandLine 'pkill -9 tomcat' 
    } 
} 

나는이 오류

이러한 각각의 접근 방식에서 어디서 잘못 될지 알려주실 수 있습니까?

위의 두 가지 중 어느 것도 올바른 방법이 아닌 경우 예제를 사용하여 수행 방법을 지정하십시오.

+1

를 통해이하지 않습니다 정말 적합 내 대답의 일부,하지만 난 진짜로을 실행할 경우에만 doMyExecTask를 실행합니다 당신이'pkill java'를 원한다고 생각하지 마십시오. 그건 당신의 IDE와 잠재적으로 gradle 자체를 포함한 모든 자바 프로세스를 죽일 것입니다. –

+0

''바람둥이 '로 변경했습니다. –

+0

누군가가 여전히 문제를 겪고있는 경우에 대비하여 dx 명령을 변경했습니다. 아래에'.bat '를 포함 시키려면 문제가 있습니다. 'commandLine 'sdk/dx.bat '--dex' – Guna

답변

16

난 당신이 찾고있는 생각 :

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

가장 큰 차이점은 매우 미묘하다 - 그냥 두 글자 삭제. <<은 작업 정의에서 제외되었습니다. 다른 차이점은 commandLine이 실행 파일이 인수와 별도로 전달 될 것으로 기대한다는 것입니다.

나는 gradle : the build lifecycle에서 중요한 아이디어 때문에 <<을 삭제했습니다. 구성 및 실행 단계가 있습니다 (전부는 아니지만 이것을 설명하는 것으로 충분합니다).

<<doLast 말처럼 - 당신이 작업에 대한 작업을합니다 (실행 단계)의 끝에 통과 폐쇄을 추가합니다. 즉 여기서는 정상적인 명령 (보통 Exec 개체)을 실행하려고 시도하고 실행 한 후 ,을 실행하면 블록을 호출합니다 (블록 설정은). 따라서 실행 중일 때 execCommand은 실제로 null이며 블록이 실행될 때까지 유지됩니다. 이것이 당신 문제의 핵심입니다.

<< (왼쪽 시프트라고도 함)이 없으면 같은 블록이 구성 단계 동안 실행됩니다. 따라서 exec 명령은 실행되기 전에 설정되고 작동합니다.

+0

해결책을 찾았지만 행운이 없었습니다.이 오류가 발생했습니다.'> 프로세스 'command'를 시작하는 중 문제가 발생했습니다. pkill -9 java''' –

+2

commandLine 구문에 다른 오류가있었습니다. 인수는 실행 파일과 구분되어야합니다. 편집으로 업데이트했습니다. –

+0

당신의 솔루션은'commandLine 'catalina.sh','run'과 같이 작동하지만'commandLine 'pkill', '-9', 'tomcat'에는 작동하지 않습니다. 어떤 이유? –

3

다음은 명령 줄에서 실행하고 싶지만 빌드의 일부로 Android Studio에서 실행하지 않으려는 독립 실행 형 exec 작업이있는 경우 동일한 오류가 발생하는 다른 해결책입니다.

항상 "myExecTask"의 구성을 실행되지만 명시 적으로 "Gradle을 myExecTask"

/** 
* 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' 
} 
관련 문제