2012-02-09 31 views
7

Thứ tự của phương thức doFirst được xác định trong tập lệnh xây dựng gradle như thế nào? Tôi có tập lệnh mẫu sau có chứa hai phương thức doFirst. Tôi hiểu rằng họ là phụ, vì cả hai đều thực hiện, nhưng theo thứ tự mà điều này xảy ra nhìn lại quá khứ:Gradle doFirst() Lệnh thi hành

task initialize 
task depTask(dependsOn: initialize) 

initialize { 
    doFirst { 
     println 'processing doFirst in initialization (configuration)' 
    } 

    println 'processing initialize (configuration)' 
} 

depTask { 
    println 'processing depTask (configuration)' 
} 

depTask << { 
    println 'executing depTask (execution)' 
} 

initialize << { 
    println 'executing initialize (execution)' 
} 

initialize.doFirst { 
    println 'executing doFirst on initialize (execution)' 
} 

Kết quả của kịch bản này là:

processing initialize (configuration) 
processing depTask (configuration) 
executing doFirst on initialize (execution) 
processing doFirst in initialization (configuration) 
executing initialize (execution) 
executing depTask (execution) 

Việc đầu tiên "doFirst" chức năng được xác định trong tác vụ khởi tạo. Thứ hai được định nghĩa bên ngoài khối cấu hình. Tại sao trường hợp đầu tiên không thực hiện trước phiên bản thứ hai? Thứ tự thực hiện trông lạc hậu. Tôi đã mong đợi cái đầu tiên, bên trong định nghĩa cấu hình, để thực thi đầu tiên. Bất kỳ trợ giúp nào hiểu được điều này sẽ được đánh giá cao.

+0

'println 'processing doFirst in initialization (configuration)'' Tôi không nghĩ điều này xảy ra trong giai đoạn cấu hình. –

Trả lời

14

initialize { doFirst { ... } }initialize.doFirst { ... } là điều tương tự. Cả hai câu lệnh đều chèn một hành động ở phía trước danh sách hành động của nhiệm vụ. Do đó các hành động được chèn vào sau (trong trường hợp này tiếp tục xuống trong kịch bản) sẽ được thực thi đầu tiên.

+1

Ok, vậy điều này hoạt động như một ngăn xếp? (cuối cùng trong lần đầu tiên ra - LIFO). – jmq

+0

nm, tôi đã thử nghiệm nó. Cám ơn đã chỉ tôi hướng đi đúng. – jmq

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