Gradle क्यों "Deprecated features" दिखा रहा है और इसका समाधान क्या है?
\n\nक्या आपने कभी Kotlin प्रोजेक्ट की build चलाते समय यह डरावना संदेश देखा है: Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0? अगर हाँ, तो आप अकेले नहीं हैं। इस सवाल ने Stack Overflow पर हजारों व्यूज बटोरे हैं, और आज हम इसे पूरी तरह से समझेंगे।
कल्पना करें: आप Kotlin में कोड लिख रहे हैं, सब कुछ ठीक चल रहा है, लेकिन अचानक Gradle नखरे दिखाने लगता है। वह कहता है: "अरे, तुम पुरानी चीज़ें इस्तेमाल कर रहे हो, जिन्हें मैं version 5.0 में हटा दूंगा!" यह ऐसा है जैसे आपकी पसंदीदा कॉफी मशीन कहे कि कल से वह पुराने कप नहीं लेगी। अप्रिय, लेकिन हल करने योग्य।
\n\nइस लेख में, हम सिर्फ एरर को हटाना नहीं सिखाएंगे। हम तीन तरीकों की तुलना करेंगे: त्वरित "पैच" से लेकर पेशेवर रिफैक्टरिंग तक। आप जानेंगे कि Gradle आपके कोड को पुराना क्यों मानता है, और इसे आधुनिक तरीके से कैसे लिखें।
\n\nGradle में deprecated features क्या हैं?
\n\nDeprecated (पुरानी) फीचर्स वे API हैं जिन्हें Gradle के डेवलपर्स भविष्य में हटाने की योजना बना रहे हैं। इन्हें पिछली संगतता के लिए रखा गया है, लेकिन अब इनका उपयोग अनुशंसित नहीं है। जब आप यह चेतावनी देखते हैं, तो Gradle सीधे कह रहा है: "तुम्हारा प्रोजेक्ट अभी बनेगा, लेकिन version 5.0 पर अपग्रेड करने के बाद नहीं बनेगा।"
\n\nअक्सर समस्या इनमें होती है:
\n- \n
- पुराने प्लगइन्स (जैसे,
kotlin-gradle-pluginके पुराने वर्जन) \n - अस्पष्ट डिपेंडेंसी (जैसे,
compileके बजायimplementationका उपयोग) \n - Groovy स्क्रिप्ट्स जो Kotlin DSL के अनुकूल नहीं हैं \n
build.gradleमें deprecated मेथड्स का सीधा उपयोग \n
तरीका 1: त्वरित समाधान — चेतावनियों को दबाना
\n\nसबसे आसान (लेकिन सबसे सही नहीं) तरीका है Gradle से कहना: "चुप रहो और काम करो।" यह ऐसा है जैसे Check Engine की लाइट को टेप से ढक देना। गाड़ी चलेगी, लेकिन समस्या बनी रहेगी।
\n\nbuild.gradle.kts (Kotlin DSL) में यह ब्लॉक जोड़ें:
tasks.withType<Wrapper> {\n gradleVersion = "4.10.3" // वर्जन फ्रीज करना\n}\n\n// या चेतावनी को दबाना\nallprojects {\n tasks.withType<AbstractCompile> {\n options.isDeprecation = false\n }\n}\n\nफायदे: तेज़, कोड में बदलाव की ज़रूरत नहीं, build पास हो जाती है।
\nनुकसान: आप समस्या का समाधान नहीं कर रहे, बल्कि टाल रहे हैं। Gradle 5.0+ पर स्विच करने पर प्रोजेक्ट टूट जाएगा। साथ ही, आप प्रदर्शन और सुरक्षा के महत्वपूर्ण सुधारों से चूक जाते हैं।
\n\nकब उपयोग करें: केवल तब जब आपको तुरंत प्रोजेक्ट बनाना हो और रिफैक्टरिंग के लिए समय न हो। लेकिन सामान्य समाधान की योजना ज़रूर बनाएं।
\n\nतरीका 2: आधुनिक कॉन्फ़िगरेशन में माइग्रेट करना
\n\nयह "सुनहरा मध्य मार्ग" है। आप सिर्फ एरर को नहीं दबाते, बल्कि प्रोजेक्ट को व्यवस्थित करते हैं। आइए Kotlin प्रोजेक्ट के उदाहरण से सामान्य समस्याओं को समझें।
\n\ncompile को implementation/api से बदलना
\n\nडिपेंडेंसी घोषित करने का पुराना तरीका — compile — Gradle 3.0 में ही deprecated हो गया था। इसके बजाय implementation और api का उपयोग करें।
पहले (Groovy):
\ndependencies {\n compile 'org.jetbrains.kotlin:kotlin-stdlib:1.3.72'\n compile 'com.squareup.retrofit2:retrofit:2.9.0'\n}\n\nअब (Kotlin DSL):
\ndependencies {\n implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n implementation("com.squareup.retrofit2:retrofit:2.9.0")\n}\n\nअंतर सरल है: implementation मॉड्यूल के उपभोक्ताओं से डिपेंडेंसी छुपाता है, जिससे build तेज़ होती है। api इसे दृश्य बनाता है, पुराने compile की तरह।
Kotlin प्लगइन अपडेट करना
\n\nपुराने kotlin-gradle-plugin वर्जन अक्सर Gradle के deprecated API का उपयोग करते हैं। kotlinlang.org पर नवीनतम वर्जन जांचें और अपडेट करें।