मैं ग्रैडल सीख रहा हूं और यह समझने की कोशिश कर रहा हूं कि इनपुट और आउटपुट फाइलें कैसे निर्धारित करती हैं कि कोई कार्य अद्यतित है या नहीं।ग्रैडल इनपुट और आउटपुट
यह कार्य कभी भी अद्यतित नहीं है, भले ही बिल्ड फ़ाइल परिवर्तित न हो।
task printFoo() {
inputs.file(getBuildFile())
doLast {
println 'foo'
}
}
यह कार्य हमेशा अद्यतित रहता है, भले ही बिल्ड फ़ाइल बदलती है।
task printFoo() {
outputs.file(getBuildFile())
doLast {
println 'foo'
}
}
मैंने उम्मीद की थी कि दोनों उदाहरण केवल तभी कार्य करें जब बिल्ड फ़ाइल बदलती है, और अन्यथा अद्यतित हो। मैं क्या खो रहा हूँ?
मैंने कई फाइलों के साथ फिर से परीक्षण किया: स्थिति हमेशा अद्यतित होती है जब केवल आउटपुट निर्दिष्ट होता है। जब इनपुट और आउटपुट दोनों निर्दिष्ट होते हैं, तो अपेक्षित स्थिति में परिवर्तन होता है (भले ही इनपुट और आउटपुट एक ही फ़ाइल हों)। मैंने इस उत्तर को कथन के आधार पर स्वीकार कर लिया है, "_Gradle को इनपुट और outputs._ के लिए टाइमस्टैम्प की आवश्यकता है।" मेरा परीक्षण दिखाता है कि दोनों आवश्यक हैं। – jaco0646
यह एक बग की तरह लगता है। लेकिन मेरे पास कोई सुराग नहीं है जो आउटपुट फाइलों को बदलना चाहिए और ऐसा करने के लिए, केवल एक आउटपुट को आउटपुट से बाहर माना जाना चाहिए। क्या आप उस कार्य के कॉन्फ़िगरेशन चरण के दौरान आउटपुट को स्पर्श/बदलना चाहिए? अर्थशास्त्र मेरी राय में स्पष्ट नहीं हैं। विश्वसनीय व्यवहार के लिए हमेशा इनपुट और आउटपुट निर्दिष्ट करना सर्वोत्तम होता है। –