2013-07-03 32 views
11

Sau khi xây dựng tập tin đầu ra cuối cùng của tôi với Gradle tôi muốn làm 2 điều. Cập nhật tệp version.properties địa phương và sao chép cuối cùng đầu ra cuối cùng vào một số thư mục cụ thể để lưu trữ. Giả sử tôi đã có 2 phương pháp được triển khai thực hiện chính xác những gì tôi vừa mô tả, updateVersionProperties()archiveOutputFile().Tốt hơn để sử dụng các phụ thuộc nhiệm vụ hoặc task.doLast trong Gradle?

Tôi biết tự hỏi cách tốt nhất để làm điều này là những gì ...

Phương án A:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

Phương án B:

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

Và ở đây tôi sẽ gọi myBuildTask thay vì assembleRelease như trong thay thế A.

Cách nào là cách được khuyến nghị để thực hiện việc này và tại sao? Có lợi thế nào khác hơn không? Muốn một số giải thích, vui lòng ... :)

Trả lời

13

Bất cứ khi nào bạn có thể, hãy lập mô hình hoạt động mới dưới dạng các tác vụ riêng biệt. (Trong trường hợp của bạn, bạn có thể thêm hai nhiều nhiệm vụ.) Này có nhiều ưu điểm:

  • Better phản hồi như để hoạt động nào hiện đang thực hiện hoặc không
  • Khả năng để khai báo đầu vào công việc và kết quả đầu ra (gặt hái tất cả lợi ích mà đến từ này)
  • khả năng tái sử dụng các loại công việc hiện
  • Nhiều khả năng Gradle để thực hiện nhiệm vụ song song
  • vv

Đôi khi không thể dễ dàng mô hình hoạt động như một nhiệm vụ riêng biệt. (Một ví dụ là khi cần phải xử lý các kết quả đầu ra của một nhiệm vụ hiện có tại chỗ. Làm điều này trong một nhiệm vụ riêng biệt sẽ dẫn đến tác vụ ban đầu không bao giờ là up-to-date trong các lần chạy tiếp theo.) Chỉ sau đó hoạt động phải được gắn vào một nhiệm vụ hiện tại với doLast.

+1

Bạn khuyên bạn nên tạo các phụ thuộc nhiệm vụ đó như thế nào? Tôi muốn một nhiệm vụ duy nhất để lắp ráp toàn bộ dự án (về cơ bản là "thay thế" 'assembleRelease') và cả hai nhiệm vụ này phải được thực hiện chỉ ** sau khi thực thi ** assembleRelease' thành công **. Giữa chúng, thứ tự không thực sự có liên quan. –

+6

'myBuildTask.dependsOn (updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn (assembleRelease); archiveOutputFile.dependsOn (assembleRelease) ' –