2014-08-29 17 views
21

Tôi có một thiết lập xây dựng gradle ở đầu mà tôi muốn thực thi một shellscript trong một thư mục con chuẩn bị môi trường của tôi.Thực hiện kịch bản shell trong 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 

Tuy nhiên, khi tôi thực hiện các nhiệm vụ hoặc bằng cách gọi gradle myPrebuildTask hoặc chỉ đơn giản xây dựng dự án, các lỗi sau xảy ra:

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

Thật không may, đó là tất cả những gì nhận được.
Tôi cũng đã thử lỗi sau đây.

commandLine 'sh mySubDir/myScript.sh' 

Tôi sử dụng Lớp 1.10 (cần thiết bởi Android) trên Windows, bên trong vỏ Cygwin. Bất kỳ ý tưởng?

Trả lời

18

sử dụng

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

kịch bản của bạn tự nó không phải là một chương trình riêng của mình, đó là lý do tại sao bạn phải khai báo 'sh' như các chương trình và đường dẫn đến kịch bản của bạn như một cuộc tranh cãi.

+0

lệnh khác nhau để thực hiện dưới linux và windows (Cygwin) là cần thiết. Tôi đã kết thúc việc cung cấp tên kịch bản làm tham số: commandLine 'sh', 'myScript.sh' –

+0

Nhớ đặt nhiệm vụ vào tệp gradle của dự án chứ không phải tệp gradle của mô-đun. –

-5

tôi sao chép scipt vỏ của tôi để /usr/local/bin với +x phép và sử dụng nó như là chỉ là một lệnh:

commandLine 'my_script.sh' 
+0

Tùy chọn này hoạt động, nhưng tôi không khuyên bạn nên đặt nhiều tệp trong/usr/local/bin –

11

Một cách tổng quát hơn về văn bản cho nhiệm vụ exec, nhưng di động cho Windows/Linux, nếu bạn đang gọi một tập lệnh trên 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' 
    } 
} 

này không trực tiếp giải quyết các trường hợp sử dụng cho OP (kể từ khi có tập tin script trong thư mục làm việc), nhưng tiêu đề của câu hỏi là chung chung hơn (và đã thu hút tôi ở đây), vì vậy nó có thể giúp một số có thể.

3

may lựa chọn với commandline không có tác dụng đối với tôi trong bất kỳ cách nào và bạn tôi tìm cách khác với thực thi

executable "./myScript.sh" 

và đầy đủ nhiệm vụ sẽ

task startScript() { 
    doLast { 
    exec { 
      executable "./myScript.sh" 
     } 
    } 
} 
Các vấn đề liên quan