2015-06-09 18 views
6

Tôi đang học Gradle và cố gắng hiểu cách các tệp đầu vào và đầu ra xác định xem tác vụ có được cập nhật hay không.Đầu vào và đầu ra Gradle

Tác vụ này không bao giờ được cập nhật, ngay cả khi tệp xây dựng không thay đổi.

task printFoo() { 
     inputs.file(getBuildFile()) 

     doLast { 
      println 'foo' 
     } 
    } 

Tác vụ này luôn được cập nhật, ngay cả khi tệp xây dựng thay đổi.

task printFoo() { 
     outputs.file(getBuildFile()) 

     doLast { 
      println 'foo' 
     } 
    } 

Tôi đã mong đợi cả hai ví dụ để xem xét tác vụ lỗi thời chỉ khi tệp xây dựng thay đổi và cập nhật theo cách khác. Tôi đang thiếu gì?

Trả lời

5

Gradle cần dấu thời gian cho đầu vào và đầu ra để có thể xác định liệu kết quả nhiệm vụ đã lỗi thời chưa.

Trong trường hợp đầu tiên, bạn không có bất kỳ dấu thời gian đầu ra nào vì bạn không có bất kỳ đầu ra nào. Gradle không thể xác định liệu các đầu ra của bạn có được cập nhật hay không, bởi vì nó không biết chúng. Vì vậy, nó xem xét kết quả đầu ra của bạn để luôn luôn được ra khỏi ngày. Từ tài liệu: "Tác vụ không có kết quả đầu ra được xác định sẽ không bao giờ được xem là cập nhật". (https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks)

Trong trường hợp thứ hai Gradle nên làm những gì bạn mong đợi: xem xét kết quả đầu ra của công việc lỗi thời khi tệp xây dựng thay đổi. Từ tài liệu: "Một nhiệm vụ với chỉ các kết quả đầu ra được xác định sẽ được xem là cập nhật nếu các kết quả đầu ra đó không thay đổi kể từ lần xây dựng trước đó". Đây có thể là một lỗi, nhưng tôi nghĩ đó là do bạn sử dụng tệp xây dựng làm đầu ra. Bạn đã thử nó với một tập tin khác chưa?

+0

Tôi đã kiểm tra lại với một số tệp: trạng thái luôn được cập nhật khi chỉ có đầu ra được chỉ định. Khi cả hai đầu vào và đầu ra được chỉ định, trạng thái thay đổi như mong đợi (ngay cả khi đầu vào và đầu ra là cùng một tệp). Tôi đã chấp nhận câu trả lời này dựa trên tuyên bố, "_Gradle cần dấu thời gian cho đầu vào và đầu ra." "Thử nghiệm của tôi cho thấy rằng cả hai đều được yêu cầu. – jaco0646

+1

Nghe có vẻ giống như một con bọ. Nhưng tôi không có một đầu mối những người nên thay đổi các tập tin đầu ra và khi nào để làm điều này, cho một nhiệm vụ với kết quả đầu ra chỉ được coi là lỗi thời. Bạn có nên chạm/thay đổi kết quả đầu ra trong giai đoạn cấu hình của tác vụ đó không? Ngữ nghĩa không rõ ràng theo ý kiến ​​của tôi. Tốt nhất là luôn luôn chỉ định đầu vào và đầu ra cho hành vi đáng tin cậy. –

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