2014-08-29 5 views
21

У меня есть установка построения градиента, в начале которой я хочу выполнить shellscript в подкаталоге, который подготавливает мою среду.Выполнять скрипт оболочки в Gradle

task build << { 
} 
task preBuild << { 
    println 'do prebuild stuff:' 
} 
task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    commandLine './myScript.sh' 
} 

build.dependsOn preBuild 
preBuild.dependsOn myPrebuildTask 

Однако, когда я выполнить задачу либо позвонив по телефону gradle myPrebuildTask или просто строит проект, возникает следующая ошибка:

> A problem occurred starting process 'command './myScript.sh'' 

К сожалению, вот и все я получаю.
Я также пробовал следующее - ту же ошибку.

commandLine 'sh mySubDir/myScript.sh' 

Я использую Gradle 1.10 (необходимый для Android) для Windows, внутри оболочки Cygwin. Есть идеи?

ответ

18

использование

commandLine 'sh', './myScript.sh' 

ваш сценарий сам не сама программа, поэтому вы должны объявить «ш» в качестве программы и путь к вашему сценарию в качестве аргумента.

+0

различных команд для выполнения в соответствии с Linux и Windows (Cygwin). Я закончил тем, что предоставил имя сценария в качестве параметра: commandLine 'sh', 'myScript.sh' –

+0

Не забудьте поставить задачу в файл проекта gradle, а не в файл gradle. –

-5

Я скопировал мою оболочку scipt в /usr/local/bin с +x разрешения и использовать его как только другую команду:

commandLine 'my_script.sh' 
+0

Эта опция работает, но я не рекомендую помещать много файлов в/usr/local/bin –

11

Более общий способ написания EXEC задачи, но портативный для Windows/Linux, если вы ссылающиеся команда файл на PATH:

task myPrebuildTask(type: Exec) { 
    workingDir "$projectDir/mySubDir" 
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) { 
     commandLine 'cmd', '/c', 'mycommand' 
    } else { 
     commandLine 'sh', '-c', 'mycommand' 
    } 
} 

Это напрямую не рассматривается вариант использования для OP (поскольку существует файл сценария в рабочем каталоге), но название этого вопроса является более общим (и обратил меня здесь), так что это может помочь некоторым возможно, один.

3

, к сожалению, варианты с CommandLine не работал для меня в любом случае, и моего друг найти другой путь с исполняемыми

executable "./myScript.sh" 

и задачей полного будет

task startScript() { 
    doLast { 
    exec { 
      executable "./myScript.sh" 
     } 
    } 
} 
Смежные вопросы