Trong tệp xây dựng gradle, có nhiều cách để chỉ định các mục được thực thi cho một tác vụ cụ thể. phương thức doFirst đặt một mục tác vụ lên trên cùng của ngăn tác vụ, do đó mục đó được thực thi trước phần còn lại của ngăn tác vụ. Điều này rất tiện lợi nếu bạn cần thực hiện một số mục chuẩn bị trước khi thực hiện nhiệm vụ chính. Trong thực tế, nếu bạn gọi doFirst nhiều lần, mục được thêm vào trong cuộc gọi cuối cùng là điều đầu tiên được thực thi.gradle doLast triết lý
Về lý thuyết, doLast phải làm điều gì đó tương tự, nhưng doLast sẽ nhận được gọi là SAU khi việc thực hiện chính của tác vụ hoàn tất. Nhưng, trong gradle 1.2, nếu bạn gọi doLast và sau đó thêm một cái gì đó vào nhiệm vụ chính sau khi doLast trong tệp gradle.build, mục tác vụ chính là mục cuối cùng được gọi. Ví dụ, sau đây gradle build file:
task myTask
myTask << {
println "myTask main execution block"
}
myTask.doFirst {
println "myTask doFirst call one"
}
myTask.doFirst {
println "myTask doFirst call two"
}
myTask.doLast {
println "myTask doLast"
}
myTask << {
println "myTask more main execution block"
}
Tạo đầu ra sau đây:
:myTask
myTask doFirst call two
myTask doFirst call one
myTask main execution block
myTask doLast
myTask more main execution block
BUILD SUCCESSFUL
Total time: 1.585 secs
Câu hỏi của tôi là thế này: Đó có phải là mục đích của doLast chỉ đơn giản là thêm bước vào phần cuối của nhiệm vụ (như doFirst bắt đầu từ đầu)? Nếu vậy, doLast có vẻ vô nghĩa với ngoại lệ cung cấp tính đối xứng với doFirst. Người dùng chỉ có thể làm myTask < < {...} để nối thêm thứ gì đó vào cuối. Tôi đã nghĩ rằng doLast sẽ đảm bảo rằng mọi mục "doLast" sẽ được thực hiện sau khối thực thi chính.
Đây có phải là cách doLast của gradle được cho là hoạt động hay là lỗi này ?? (hoặc tôi chỉ là ngu ngốc cho phụ thêm một cái gì đó vào khối thực hiện chính sau khi gọi doLast - đó là một sai lầm đơn giản sau khi tacking trong một khối thực hiện).