2012-12-11 47 views
7

Có thể kế thừa một định nghĩa nhiệm vụ từ một định nghĩa khác không? Những gì tôi muốn làm là tạo ra một số hồ sơ kiểm tra, vì vậy tôi sẽ phải kiểm tra mặc định -Kế thừa nhiệm vụ Gradle thừa kế

test { 

    include 'com/something/something/**' 
    exclude 'com/something/else/**' 

    maxParallelForks 5 

    testLogging{ 
     exceptionFormat "full" 
     showStackTraces = false 
    } 

    jvmArgs '-Xms128m', '-Xmx512m', '-XX:MaxPermSize=128m' 
} 

và một số xét nghiệm khác với overriden "bao gồm" hoặc "maxParallelForks" phần, vv

Có thể không tạo lớp Task mới?

Trả lời

10

Bạn có thể cấu hình tất cả những nhiệm vụ trong một đi, miễn là chúng ta cùng loại bằng cách sử dụng cấu trúc sau:

tasks.withType(Test) { 
    include 'com/something/something/** 
    ... 
} 

này cấu hình tất cả các nhiệm vụ của loại "Test" trong một đi. Sau đó, bạn có thể ghi đè lên các cấu hình.

hoặc nếu bạn không muốn thiết lập tất cả các tác vụ hoặc một số công việc có loại khác, bạn có thể liệt kê chúng như trong đoạn mã sau.

["test","anotherTestTask"].each { name -> 
    task "$name" { 
    include ... 
    } 
} 

Hãy nhớ rằng, bạn có khả năng kịch bản đầy đủ của Groovy, vì vậy có rất nhiều lựa chọn ở đây ...

+1

Cảm ơn, tôi nghĩ rằng tôi sẽ đi với cấu trúc đầu tiên của bạn "tasks.withType (Test) *. configure ... ". Tôi vẫn tò mò mặc dù nếu có một cách để xây dựng một số cây thừa kế - để có một số định nghĩa thử nghiệm toàn cục, thì một số testSuite1 mở rộng thử nghiệm toàn cầu, sau đó một số testSuite2 mở rộng testSuite2, ... Tôi biết có một số "hack" như thế nào có thể đạt được điều này, mặc dù tôi vẫn muốn thấy một số hỗ trợ DSL tốt đẹp cho điều đó. – mawek

+1

Cú pháp có thể được đơn giản hóa thành 'tasks.withType (Test) {...}' và 'task" $ t "{...}'. Chúng tôi tin rằng các quy tắc cấu hình * rõ ràng * là một cách tiếp cận tốt hơn so với cơ chế thừa kế với tất cả các ngữ nghĩa ẩn của nó. Do đó chúng tôi không có kế hoạch để thêm một. –

+0

Cảm ơn đơn giản hóa Peter :) –