2012-01-23 26 views
11

Tôi không biết nếu tôi không làm điều này phải hoặc nếu tôi có để xử lý các nhiệm vụ gradle dựng sẵn khác nhau nhưng tôi có một nhiệm vụ kiểm tra mà tôi định nghĩa như thế nàyLàm cách nào để bạn thực hiện tác vụ đã được tạo sẵn trong quá trình đóng doFirst/doLast?

task testNGTests(type: Test) { 
    useTestNG() 
} 

và đang cố gắng sử dụng nó trong một kết thúc như thế này doFirst

task taskA { 
    doFirst { 
     testNGTests.execute() 
    } 
} 

nhưng nó không hoạt động đối với một số lý do, tôi cũng đã cố gắng

testNGTests.executeTests() 

nhưng điều đó không làm việc, hoặc. Có cách nào đặc biệt mà tôi phải xử lý nhiệm vụ thử nghiệm được xây dựng không?

Tôi đang sử dụng phiên bản gradle 0.9.2

+0

Nhiệm vụ không hỗ trợ 'thực hiện() 'cuộc gọi. Chỉ đóng cửa (nghĩa là defs phương pháp) làm. –

Trả lời

14

Thực hiện tác vụ từ một tác vụ khác không phải là (và chưa bao giờ) được hỗ trợ chính thức. Thay vào đó, hãy thử sử dụng phụ thuộc nhiệm vụ, ví dụ: taskA.dependsOn(testNGTests).

+1

Nhưng không có cách nào để hỗ trợ đặt hàng nếu có nhiều phụ thuộc, phải không? Làm thế nào tôi sẽ có được xung quanh này? – AgentRegEdit

+0

Vui lòng đưa ra một ví dụ cụ thể. 'taskA.dependsOn (taskB, taskC)' là viết tắt của 'taskA.dependsOn (taskB); taskA.dependsOn (taskC) '. Nhưng tất nhiên bạn có thể làm 'taskA.dependsOn (taskB); taskB.dependsOn (taskC) '. –

+0

vì vậy nếu tôi có một 'taskA (dependsOn: taskB, taskC)' gradle sẽ chạy taskC taskB và sau đó taskA, nhưng nếu tôi có 'taskA (dependsOn: taskC, taskB)' gradle vẫn chạy nó theo thứ tự của taskB, taskC , taskA, các phụ thuộc đang được sắp xếp theo thứ tự bảng chữ cái có vẻ hơi lạ – AgentRegEdit

6

Tôi đã tìm thấy cách giải quyết để thực hiện việc này. Trong kịch bản của tôi, tôi có một nhiệm vụ đọc đầu vào của người dùng và tùy thuộc vào anwser của mình, tôi cần tạo một EAR với các cấu hình khác nhau. Tôi đã sử dụng tác vụ loại GradleBuild. Đây là mã:

task createEar() << { 
    def wichTypeOfEar = System.console().readLine("Which EAR?? (a, b)\n")  
    if(wichTypeOfEar == 'a'){ 
     tasks.earA.execute() 
    }else{ 
     tasks.earB.execute() 
    }  
} 

task earA(type: GradleBuild) { 
    doFirst{ 
     // Here I can do some stuffs related to ear A 
    } 
    tasks = ['ear'] 
} 

task earB(type: GradleBuild) { 
    doFirst{ 
     // Here I can do some stuffs related to ear B 
    } 
    tasks = ['ear'] 
} 

ear { 
    //Here is the common built in EAR task from 'ear' plugin 
} 

Trong trường hợp bạn bạn có thể làm như sau:

task testNGTests(type: Test) { 
    useTestNG()  
} 

task testNGTestsWrapper(type: GradleBuild){ 
    tasks = ['testNGTests'] 
} 

task taskA { 
    doFirst { 
    testNGTestsWrapper.execute() 
    } 
} 
+0

Tại sao bạn cần phải thêm trước 'tác vụ'' trước khi thực hiện? –

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