2011-09-02 19 views

Trả lời

92

Hãy thử chạy bản dựng của bạn với -C rebuild để xây dựng lại bộ nhớ cache của Gradle.

Trong các phiên bản mới hơn của Gradle, sử dụng --rerun-tasks

23

Bạn có thể sử dụng cleanTaskname

Hãy nói rằng bạn có

:someproject:sometask1 UP-TO-DATE 
:someproject:sometask2 UP-TO-DATE 
:someproject:sometask3 UP-TO-DATE 

Và bạn muốn để buộc chúng ta hãy nói sometask2 chạy lại bạn có thể

someproject:cleanSometask2 

trước khi bạn chạy các nhiệm vụ chạy tất cả.

Dường như ở chế độ gradle, mọi tác vụ hiểu UP-TO-DATE cũng hiểu cách tự làm sạch.

+0

này chắc chắn công trình. Có nhiệm vụ "cleanAll" nào không? –

+0

'gradle clean' sẽ làm sạch mọi thứ cho dự án bạn đang ở. Về cơ bản, xóa thư mục đầu ra chính của bạn là '/ build' theo mặc định. Đây có phải là những gì bạn đang tìm kiếm? –

+5

Không. Điều đó sẽ không được thiết lập lại cập nhật nếu cập nhật được chụp là không có tệp đầu ra cho một tác vụ nhất định. Đó là, nếu tôi có một phần của sự phá vỡ xây dựng nhưng thành công tổng thể, trạng thái bị bắt là sai, và tôi cần phải xóa nó. –

66

Nếu bạn muốn chỉ là một nhiệm vụ duy nhất để luôn luôn chạy, bạn có thể thiết lập các outputs tài sản bên trong của nhiệm vụ.

outputs.upToDateWhen { false } 

Xin lưu ý rằng nếu tác vụ của bạn không có bất kỳ đầu vào tệp nào được xác định, Gradle có thể bỏ qua tác vụ, ngay cả khi sử dụng mã ở trên. Ví dụ: trong tác vụ Zip hoặc Sao chép, cần phải có ít nhất một tệp được cung cấp trong cấu hình cấu hình của định nghĩa tác vụ.

+12

Điều này không có gì cho tôi. Tôi đã thêm nó vào một nhiệm vụ và nhận được "UP-TO-DATE". Điều thú vị là nó là một ZipTask và tôi đã xóa kho lưu trữ đích. – maaartinus

+4

Thật đáng kinh ngạc khi sử dụng như sau: 'tasks.whenTaskAdded {theTask -> if (theTask.name.startsWith (" dex ")) { theTask.outputs.upToDateWhen {false} theTask.doLast {task ->. ..}}} ' –

+0

Nó không hoạt động đối với tôi :( –

1

Tôi đã gặp phải trường hợp khó khăn khi đặt outputs.upToDateWhen { false } bên trong tác vụ hoặc thêm cờ --rerun-tasks không giúp đỡ vì nhiệm vụ setOnlyIf tiếp tục được đặt thành false mỗi lần tôi chạy nó.

thêm dòng sau vào build.gradle buộc thực hiện myTask:

gradle.taskGraph.whenReady { taskGraph -> 
    def tasks = taskGraph.getAllTasks() 
    tasks.each { 
    def taskName = it.getName() 
    if(taskName == 'myTask') { 
     println("Found $taskName") 

     it.setOnlyIf { true } 
     it.outputs.upToDateWhen { false } 
    } 
    } 
} 
Các vấn đề liên quan