2015-10-02 34 views
24

Tôi muốn chạy nhiều tác vụ gradle như một. Vì vậy, thay vìNhiệm vụ tùy chỉnh Gradle chạy nhiều nhiệm vụ

./gradlew clean build publish 

Tôi muốn có một công việc tùy chỉnh

./gradlew cleanBuildPublish 

thực thi cleanbuildpublish theo thứ tự.

Làm cách nào có thể?

này không hoạt động

task cleanBuildPublish { 
    dependsOn 'clean' 
    dependsOn 'build' 
    dependsOn 'publish' 
} 
+0

Bạn có sử dụng plugin java? –

+0

@SantoshGokak vâng tôi làm – Niklas

+0

Tôi có câu trả lời được cập nhật. Vui lòng xem xét. –

Trả lời

36

Nếu bạn cần phải thực hiện một số nhiệm vụ theo thứ tự được xác định trước, thì bạn cần phải không chỉ thiết dependsOn, mà còn để thiết lập mustRunAfter tài sản cho các nhiệm vụ này, giống như trong đoạn mã sau:

task cleanBuildPublish { 
    dependsOn 'clean' 
    dependsOn 'build' 
    dependsOn 'publish' 
    tasks.findByName('build').mustRunAfter 'clean' 
    tasks.findByName('publish').mustRunAfter 'build' 
} 

dependsOn không xác định thứ tự thực hiện tác vụ, nó chỉ làm cho một nhiệm vụ phụ thuộc vào một nhiệm vụ khác, trong khi mustRunAfter thực hiện.

+0

Liệu nó vẫn có thể thực hiện các nhiệm vụ chỉ? – Niklas

+0

Tại sao không. Bạn đặt tất cả các phụ thuộc này chỉ khi thực hiện nhiệm vụ – Stanislav

+5

Tôi nhận được lỗi này 'Không thể gọi phương thức mustRunAfter() trên đối tượng null ' – Niklas

1

Hãy thử dưới đây cách để làm cho cleanBuildPublish phụ thuộc vào các nhiệm vụ khác

build.gradle

task clean{ 
    println "lets clean" 
} 

task build { 
    println "lets build" 
} 

task publish { 
    println "lets publish" 
} 

task cleanBuildPublish{ 
    println 'lets do all' 
} 


cleanBuildPublish.dependsOn clean 
cleanBuildPublish.dependsOn build 
cleanBuildPublish.dependsOn publish 

Output

$ gradle cleanBuildPublish 
lets clean 
lets build 
lets publish 
lets do all 
:build UP-TO-DATE 
:clean UP-TO-DATE 
:publish UP-TO-DATE 
:cleanBuildPublish UP-TO-DATE 

BUILD SUCCESSFUL 

Total time: 2.738 secs 

séc https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask để biết thêm chi tiết

+0

Vẫn không. Đầu ra: http://pastebin.com/8knNfLEY Nhiệm vụ tốt nghiệp http://pastebin.com/NaHhdRkA – Niklas

+0

Vui lòng chia sẻ tệp build.gradle của bạn –

+0

Dự án: http://pastebin.com/4uN9Usvd Lịch mô-đun: http: // pastebin .com/CPzYKNqx Publishing.gradle http://pastebin.com/XMMQUG4C – Niklas

0

Nếu bố nhiệm vụ là trong một dự án phụ tên subProjectName,

... 
tasks.findByPath(':subProjectName:publish').mustRunAfter 'build' 
... 
-2

Hãy thử thêm defaultTasks trong build.gradle. Ví dụ: defaultTasks 'clean', 'build', 'publish'

23

Bạn cũng có thể sử dụng các lớp cơ sở nhiệm vụ được gọi là GradleBuild

đây làm thế nào bạn có thể làm điều đó với GradleBuild

task cleanBuildPublish(type: GradleBuild) { 
    tasks = ['clean', 'build', 'publish'] 
} 
+1

đây chính xác là những gì tôi đang tìm kiếm, cảm ơn bạn –

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