2016-02-22 38 views
15

Tôi có 2 ứng dụng riêng biệt (trong một dự án) yêu cầu 2 bản dựng riêng biệt (sencha cmd). Tôi đã được yêu cầu tạo một tập lệnh gradle sẽ thực hiện các bản dựng cho cả hai ứng dụng.Gradle - thực hiện nhiều lệnh từ nhiệm vụ

Tôi đã tạo một tác vụ xây dựng một ứng dụng nhưng gặp sự cố khi sử dụng cùng một tác vụ để xây dựng ứng dụng thứ 2.

Đây là những gì tôi có cho đến nay:

task senchaCmdBuild (type: Exec) { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 

và điều này hoạt động tốt.

Khi tôi thêm 2 dòng sau vào nhiệm vụ trên:

workingDir 'src/main/app/MYOTHERAPP' 
commandLine 'cmd', 'c', 'sencha app build' 

lệnh đầu tiên được bỏ qua và chỉ lệnh thực thi thứ hai.

Vì vậy, dù sao tôi có thể thực hiện cả hai lệnh bằng một tác vụ?

+1

tạo hai 'Exec 'nhiệm vụ và chạy cả hai từ một nhiệm vụ tổng thể. – RaGe

+1

Tôi cảm thấy rằng phải có một giải pháp mà bạn có thể tận dụng '&&' trên commandLine để thực thi nhiều thứ. Ngoài ra, bạn có thể chỉ cần gọi một kịch bản shell đã làm cả hai. –

Trả lời

28

Bạn có thể sử dụng cách thứ hai để khai báo các loại tác vụ trên gradle.

task senchaCmdBuild { 
    doLast { 
    exec { 
     workingDir 'src/main/app/MYAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    exec { 
     workingDir 'src/main/app/MYOTHERAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    } 
} 

Bạn cần đưa phương pháp exec trong doLast để được thực hiện chỉ trên thực chảy

+1

Nếu bạn đang làm điều này bên trong một plugin, bạn cần sử dụng 'project.exec' (cũng như' project.task') để gọi các phương thức DSL thích hợp. – elias

+1

Cảm ơn rất nhiều, tôi đã tìm kiếm điều này trong nhiều ngày. Drazul, bạn quá siêu –

+0

Có cách nào để chỉ chạy lệnh thứ hai nếu lệnh đầu tiên không thành công? –

3

Không thể định cấu hình (chạy) nhiều lệnh cho tác vụ thuộc loại Exec. commandLine nó chỉ là một setter - người cuối cùng thắng. Nếu bạn cần chạy nhiều lệnh, ý tưởng tốt nhất là triển khai nhiều tác vụ như @RaGe được đề xuất trong nhận xét hoặc viết tác vụ tùy chỉnh và sử dụng cơ chế gốc của groovy - phương pháp execute.

1

Bạn cũng có thể sử dụng phương pháp gradle thay vì tạo ra các nhiệm vụ do tưởng tượng

task senchaBuild() { 
doLast { 
    senchaBuild_steps() 
} 
} 

void senchaBuild_steps() { 
exec { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
exec { 
    workingDir 'src/main/app/MYOTHERAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
} 
+0

tuyệt vời, điều đó làm cho tôi cuộc sống (xây dựng :)) dễ dàng hơn! – user3385242

Các vấn đề liên quan