मैं केवल एक विशिष्ट कार्य के लिए काम करने के लिए ग्रैडल के mustRunAfter
और finalizedBy
प्राप्त करने का प्रयास कर रहा हूं। इस उदाहरण build.gradle
लें:Gradle's mustRunAfter/finalized केवल एक विशिष्ट कार्य के लिए?
task removeTestDatabaseContainer {
doLast {
println '\ninside removeTestDatabaseContainer\n'
}
}
task startTestDatabaseContainer {
doLast {
println '\ninside startTestDatabaseContainer\n'
}
finalizedBy removeTestDatabaseContainer
}
task flywayMigrate { t->
doLast {
println '\n inside flywayMigrate\n'
}
}
task flywayClean { t->
doLast {
println '\n inside flywayClean\n'
}
}
task testEverything {
dependsOn startTestDatabaseContainer
dependsOn flywayMigrate
dependsOn flywayClean
flywayMigrate.mustRunAfter startTestDatabaseContainer
flywayMigrate.finalizedBy flywayClean
flywayClean.mustRunAfter flywayMigrate
flywayClean.finalizedBy removeTestDatabaseContainer
}
मैं कैसे testEverything
काम करता है के साथ खुश हूँ। मैं उत्पादन मुझे लगता है कि काम से हो रही है चाहते हैं:
➜ gradle testEverything
Parallel execution is an incubating feature.
:startTestDatabaseContainer
inside startTestDatabaseContainer
:flywayMigrate
inside flywayMigrate
:flywayClean
inside flywayClean
:removeTestDatabaseContainer
inside removeTestDatabaseContainer
:testEverything
BUILD SUCCESSFUL
Total time: 0.597 secs
हालांकि, जब मैं केवल flywayMigrate
मैं अप्रत्याशित समस्याओं मिल चलाते हैं।
➜ gradle flywayMigrate
Parallel execution is an incubating feature.
:flywayMigrate
inside flywayMigrate
:flywayClean
inside flywayClean
:removeTestDatabaseContainer
inside removeTestDatabaseContainer
BUILD SUCCESSFUL
Total time: 0.605 secs
यह आउटपुट मैं चाहता हूँ नहीं है: यह उत्पादन होता है। मुझे चलाने के लिए केवल flywayMigrate
चाहिए। प्रश्न 1) मैं testEverything
कैसे काम कर सकता हूं और साथ ही gradle flywayMigrate
केवल flywayMigrate
-टास्क का आह्वान कर सकता है?
प्रश्न 2)
मुझे बताया गया हूँ इस तथ्य यह है कि task testEverything {}
के कोष्ठक के अंदर सब कुछ विन्यास है, जो हमेशा Gradle द्वारा संसाधित है के साथ क्या करने के लिए कुछ नहीं है। तो किसी भी mustRunAfter
/finalizedBy
मैं एक कार्य के भीतर सेट "वैश्विक प्रभाव" होगा। लेकिन उस मामले में, gradle flywayMigrate
क्यों नहीं startTestDatabaseContainer
का आह्वान करता है? (क्योंकि लाइन flywayMigrate.mustRunAfter startTestDatabaseContainer
testEverything
कार्य के अंदर की।)
संपादित करें: मैं Gradle दस्तावेज में Ordering tasks और Finalizer tasks करने के लिए निर्देशित किया गया था और वे सवाल 2 का जवाब: mustRunAfter
ही लागू होती है जब दोनों कार्यों को दौड़ा रहे हैं। दूसरी तरफ finalizedBy
प्रभावी होता है जब केवल उस कार्य को सेट किया जाता है। यह जवाब देता है कि flywayClean
और removeTestDatabasContainer
चलाए जाते हैं जब मैं gradle flywayMigrate
निष्पादित करता हूं।
मैं अभी भी gradle testEverything
काम करने के लिए संघर्ष कर रहा हूं जैसा कि ऊपर है और साथ ही को flywayMigrate
निष्पादित करने के लिए भी मिलता है।