JavaRush /جاوا بلاگ /Random-UR /گریڈل کا ایک فوری تعارف
Viacheslav
سطح

گریڈل کا ایک فوری تعارف

گروپ میں شائع ہوا۔

تعارف

اس جائزے کا موضوع گریڈل آٹومیٹک بلڈ سسٹم ہوگا۔ انگریزی میں بلڈ سسٹم کو Build Tools کہتے ہیں ۔ گریڈل کا فوری تعارف - 1یہ بھی کیوں ضروری ہے؟ جاوا میں دستی طور پر منصوبوں کی تعمیر ایک محنت طلب عمل ہے۔ ان لائبریریوں اور فریم ورک کی صحیح نشاندہی کرنا ضروری ہے جن کی پروجیکٹ کو ضرورت ہے اور جن پر پروجیکٹ کا انحصار ہے۔ یہاں آپ Habré پر ایک بہترین مضمون پڑھ سکتے ہیں: " کمانڈ لائن پر جاوا کے ساتھ کام کرنا ۔" جلد یا بدیر آپ اس عمل کو خودکار کرنے کے لیے کچھ اسکرپٹ بنانا شروع کر دیں گے۔ اب تصور کریں کہ دنیا بھر کے تمام ڈویلپرز ایسا کرتے ہیں اور ہر کوئی دوبارہ وہی لکھتا ہے جو کسی نے اپنے پروجیکٹ کے لیے پہلے ہی لکھا ہے۔ اور پھر پروجیکٹ اسمبلی کے نظام ظاہر ہوئے جو اس عمل کو خودکار بناتے ہیں۔ اس کے علاوہ، ایک طرف، وہ آپ کو کسی پروجیکٹ کو جس طرح سے آپ چاہتے ہیں اسمبل کرنے کی اجازت دیتے ہیں، دوسری طرف، وہ آپ کو کم و بیش معیاری ٹولز فراہم کرتے ہیں۔ گریڈل کا متبادل ماون خودکار تعمیراتی نظام ہے۔ یہ دونوں اسمبلی نظام، ایک طرف، مختلف ہیں، لیکن دوسری طرف، ان میں متعدد مماثلتیں ہیں۔ گریڈل ویب سائٹ پر اس موضوع پر مواد موجود ہے: " ماون سے گریڈل کی طرف ہجرت "۔ جیسا کہ اس ٹیوٹوریل میں بتایا گیا ہے، Gradle اور Maven کا ایک پراجیکٹ بنانے کے طریقے کے بارے میں مختلف نقطہ نظر ہے۔ گریڈل کاموں کے گراف پر مبنی ہے، جو ایک دوسرے پر انحصار کر سکتے ہیں۔ کام کسی نہ کسی طرح کا کام کرتے ہیں۔ Maven بعض مراحل کا ایک ماڈل استعمال کرتا ہے، جس کے ساتھ کچھ "اہداف" منسلک ہوتے ہیں۔ یہ اہداف وہ ہیں جہاں کچھ کام کیا جاتا ہے۔ تاہم، ان مختلف طریقوں کے ساتھ، دونوں تعمیراتی نظام ایک ہی کنونشن کی پیروی کرتے ہیں اور انحصار کا انتظام یکساں ہے۔ Gradle کا استعمال شروع کرنے کے لیے آپ کو اسے ڈاؤن لوڈ کرنے کی ضرورت ہے۔ Google یا Yandex میں ہم "Gradle Build Tool" درج کرتے ہیں اور پہلے نتائج میں ہم سرکاری ویب سائٹ دیکھتے ہیں: https://gradle.org ۔ مرکزی گریڈل صفحہ پر "دستاویزات" کے ساتھ ایک لنک ہے، جو گریڈل دستاویزات کی طرف لے جاتا ہے ۔ سب سے پہلے، ہمیں گریڈل کو انسٹال (انسٹال) کرنے کی ضرورت ہے، لہذا ہم دستاویزات کے " انسٹال کرنا گریڈل " سیکشن میں دلچسپی رکھتے ہیں۔ تنصیب کے بہت سے طریقے ہیں، بشمول "پرانے زمانے کا" طریقہ، یعنی دستی طور پر (" دستی طور پر انسٹال کرنا ")۔ ہدایات کے مطابق، " صرف بائنری " قسم کی فائل ڈاؤن لوڈ کریں، جس کا نام gradle-5.1.1-bin.zip ہوگا۔ اگلا، آرکائیو کو کھولیں اور ہدایات کے مطابق PATH ماحول کے متغیر کو ترتیب دیں۔ اہم بات یہ ہے کہ ہدایات پر عمل کرنے کے بعد، کمانڈ gradle -vانسٹال کردہ گریڈل کا ورژن دکھاتا ہے۔ ایک مسئلہ ہو سکتا ہے کہ مقام کا تعین کرتے وقت، سسٹم گریڈل کو وہاں نہیں پائے گا جہاں آپ چاہتے ہیں۔ لہذا، ونڈوز پر آپ کر سکتے ہیں (*نکس پر ینالاگ ہیں): for %i in (gradle.bat) do @echo. %~$PATH:i اب، شاید، ہم واقف ہونا شروع کر سکتے ہیں۔
گریڈل - 2 کا فوری تعارف

گریڈل پروجیکٹ شروع کرنا

میں فوری طور پر نوٹ کرنا چاہوں گا کہ گریڈل کاموں کو انجام دینے کے بارے میں ہے جسے ٹاسک کہتے ہیں (میں انہیں کام کہوں گا)۔ کام مختلف پلگ ان کے ذریعہ فراہم کیے جاتے ہیں ۔ میں آپ کو مشورہ دیتا ہوں کہ سرکاری دستاویزات میں پلگ انز کے بارے میں مزید پڑھیں: " گریڈل پلگ انز کا استعمال "۔ "کور پلگ انز" کا ایک سیٹ ہے جو گریڈل انسٹال ہونے پر ہمیشہ دستیاب ہوتا ہے۔ ان پلگ انز کی مختلف کیٹیگریز ہیں، لیکن ہم " Utility " کے زمرے میں دلچسپی رکھتے ہیں۔ اس سیٹ میں " Build Init Plugin " پلگ ان شامل ہے، جو Gradle پروجیکٹ کو شروع کرنے کے لیے کام فراہم کرتا ہے۔ ہم پروجیکٹ کی قسم بنانے میں دلچسپی رکھتے ہیں: " جاوا ایپلی کیشن "۔ آئیے گریڈل ٹاسک چلاتے ہیں: آئیے gradle init --type java-application راستے میں کچھ سوالات کے جوابات دیتے ہیں، مثال کے طور پر، کہ ہم گرووی ڈی ایس ایل (گریڈل کے لیے معیاری ٹاسک ڈسکرپشن لینگویج) اور JUnit ٹیسٹنگ فریم ورک استعمال کرنا چاہتے ہیں (ہم اس کے بارے میں ایک اور جائزے میں بات کریں گے)۔ تخلیق کے بعد ہمیں فائلوں کا درج ذیل سیٹ ملے گا۔
گریڈل - 3 کا فوری تعارف
سب سے پہلے، شروع کرنے کے بعد ہمیں گریڈل کے ہمارے ورژن کے لیے پہلے سے ترتیب شدہ ایک خصوصی ریپر موصول ہوتا ہے - یہ ایک خاص اسکرپٹ ہے۔ میں آپ کو مشورہ دیتا ہوں کہ اس کے بارے میں سرکاری دستاویزات میں مزید پڑھیں - “ The Gradle Wrapper ”۔ دوسرا، ہم گریڈل بلڈ اسکرپٹ - build.gradle فائل دیکھتے ہیں۔ یہ مرکزی فائل ہے، جو بتاتی ہے کہ ہمارا پروجیکٹ کون سی لائبریریاں اور فریم ورک استعمال کرتا ہے، کن پلگ انز کو پروجیکٹ سے منسلک کرنے کی ضرورت ہے اور مختلف کاموں کو بیان کرتی ہے۔ میں آپ کو مشورہ دیتا ہوں کہ اس فائل کے بارے میں سرکاری دستاویزات میں مزید پڑھیں: " اسکرپٹ کی بنیادی باتیں بنائیں
گریڈل - 4 کا فوری تعارف

پلگ انز اور ٹاسکس

اگر ہم اب Build Script کے مواد کو دیکھیں تو ہمیں پلگ ان سیکشن نظر آئے گا:
plugins {
    id 'java'
    id 'application'
}
یہ وہی پلگ ان ہیں جن کے بارے میں ہم نے پہلے بات کی تھی۔ اور اگر پلگ ان ہیں، تو ایسے کام ہیں جو اب ہمارے لیے دستیاب ہیں۔ ہم gradle tasks کمانڈ چلا سکتے ہیں اور دیکھ سکتے ہیں کہ اب ہم اس پروجیکٹ کے ساتھ کیا کر سکتے ہیں:
گریڈل - 5 کا فوری تعارف
مثال کے طور پر، عملدرآمد کرکے gradle runہم اپنی جاوا ایپلیکیشن کی مرکزی کلاس شروع کریں گے:
گریڈل - 6 کا فوری تعارف
جیسا کہ ہم دیکھ سکتے ہیں، ذیل میں وہی لکھا ہے، 2 actionable tasks: 1 executed, 1 up-to-date اس کا کیا مطلب ہے؟ اس کا مطلب ہے کہ کل 2 کام مکمل کیے گئے تھے: مزید یہ کہ، 1 اصل میں مکمل ہو گیا تھا، اور ایک پر عمل نہیں ہوا، کیونکہ... یہ اپ ٹو ڈیٹ ہے، یعنی ریاست موجودہ ہے اور کچھ نہیں کیا گیا ہے۔ ہم نام نہاد "ڈرائی رن" پر عمل درآمد کر سکتے ہیں: gradle run -m آئیے اس کمانڈ کو عمل میں لاتے ہیں، ہم دیکھیں گے کہ رن ٹاسک کو انجام دینے کے لیے کن کاموں کو انجام دیا جائے گا:
گریڈل - 7 کا فوری تعارف
جیسا کہ ہم دیکھ سکتے ہیں، کل 4 کام مکمل کیے گئے تھے: چلانے سے پہلے، اس نے انحصاری ٹاسک کلاسز کو انجام دیا تھا۔ کلاسوں میں خود 2 انحصار ہوتے ہیں اور اسی وجہ سے اس نے compileJava اور processResources کو بھی عمل میں لایا۔ جب ہم کوئی کام انجام دیتے ہیں، تو ہم لاگز کی ایک مخصوص سطح کو دیکھتے ہوئے اسے انجام دے سکتے ہیں (لاگنگ کی سطح اس بات کا تعین کرتی ہے کہ ہم کتنے اہم پیغامات دیکھنا چاہتے ہیں)۔ مثال کے طور پر، ہم کر سکتے ہیں gradle run -i۔ یہ ہمیں معلوماتی پیغامات بھی دکھائے گا جیسے:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
گریڈل میں لاگ ان کرنے کے بارے میں مزید معلومات کے لیے، میں آپ کو مشورہ دیتا ہوں کہ سرکاری دستاویزات کا حوالہ دیں: " گریڈل لاگنگ "۔ جیسا کہ ہم دیکھ سکتے ہیں، کلاسز کا کام چھوڑ دیا گیا کیونکہ یہ UP-TO-DATE ہے ، یعنی ریاست موجودہ ہے، کچھ کرنے کی ضرورت نہیں ہے، اس لیے کوئی کارروائیاں نہیں ہوئیں۔ اس کی وجہ یہ ہے کہ بذریعہ ڈیفالٹ گریڈل میں " تازہ ترین چیک " یا نام نہاد انکریمنٹل بلڈ ہوتا ہے۔ آپ گریڈل دستاویزات میں اس طریقہ کار کے بارے میں مزید پڑھ سکتے ہیں: " تازہ ترین چیکس (AKA انکریمنٹل بلڈ) "۔ لیکن اس طریقہ کار کو --rerun-tasks پرچم کی وضاحت کرنے والے کام کو انجام دے کر غیر فعال کیا جا سکتا ہے۔ مثال کے طور پر، gradle run --rerun-tasks. اس کے بعد ہم دیکھیں گے: 2 قابل عمل کام: 2 عمل میں آئے جیسا کہ آپ دیکھ سکتے ہیں، مکمل کیے گئے کاموں کی تعداد صرف گراف کے پہلے درجے کو مدنظر رکھتی ہے، یعنی خود رن ٹاسک اور وہ کام جن پر یہ براہ راست انحصار کرتا ہے، یعنی ، کلاسز جن کاموں پر کلاسز کا انحصار ہوتا ہے ان کو یہاں شمار نہیں کیا جاتا ہے (حالانکہ جب وہ کلاسز کے کام کو انجام دیتے ہیں)۔ آپ کو کاموں کے بارے میں بھی پڑھنا چاہئے:
گریڈل - 8 کا فوری تعارف

انحصار

کسی بھی تعمیراتی نظام کے اہم کاموں میں سے ایک انحصار کا انتظام کرنا ہے، یعنی ہمارے پروجیکٹ کی کون سی لائبریری/فریم ورک۔ تعمیراتی نظام کو یقینی بنانا چاہیے کہ وہ صحیح وقت پر دستیاب ہوں اور ہماری درخواست کے حتمی نمونے کو صحیح طریقے سے جمع کریں۔ پہلے سے طے شدہ طور پر، java-application کے لیے gradle init کے بعد، ہم بلڈ اسکرپٹ میں درج ذیل مواد دیکھیں گے:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
یہاں یہ فوری طور پر واضح ہے کہ ہم کیا منسلک کر رہے ہیں۔ لیکن کچھ سمجھ کے بغیر، یہ واضح نہیں ہے کہ عمل درآمد اور جانچ کیا ہے؟ یہاں ہمیں دوبارہ گریڈل دستاویزات کی طرف رجوع کرنے کی ضرورت ہے، کیونکہ گریڈل کی دستاویزات اچھی طرح سے لکھی گئی ہیں۔ اسے " انحصار کنفیگریشنز کا انتظام " کہا جاتا ہے۔ جیسا کہ دستاویزات میں بتایا گیا ہے، ہر انحصار کا اعلان ایک مخصوص دائرہ کار کے ساتھ کیا جاتا ہے - وہ علاقہ جس کے اندر یہ انحصار دستیاب ہوگا۔ اس دائرہ کار کو کچھ ترتیب کے ذریعہ نامزد کیا گیا ہے، جن میں سے ہر ایک کا ایک منفرد نام ہے۔ یہ بھی دلچسپ ہے کہ بہت سے گریڈل پلگ ان پہلے سے طے شدہ کنفیگریشنز کو شامل کرتے ہیں۔ یہ جاننے کے لیے کہ ہمارے پاس کون سی کنفیگریشن ہے جو ہم چلا سکتے ہیں: gradle --console plain dependencies اس طرح ہم تمام دستیاب کنفیگریشنز اور ان کے انحصار کی فہرست دیکھیں گے۔ ہم اس فہرست کو فلٹر کر سکتے ہیں تاکہ ہمیں صرف دستیاب کنفیگریشنز خود نظر آئیں: gradle --console plain dependencies | find " - " ہم کیسے جانتے ہیں کہ کیا استعمال کرنا ہے؟ آپ کو یہاں تھوڑا سا پڑھنا پڑے گا۔ کیونکہ ہم "جاوا" پلگ ان کا استعمال کرتے ہیں، تو آئیے اس کی دستاویزات اور " انحصار کا انتظام " سیکشن سے آغاز کریں۔ یہاں ہم دیکھتے ہیں کہ وہاں ایک کنفیگریشن (عرف دائرہ کار) ہوا کرتی تھی جسے "کمپائل" کہا جاتا تھا اور اس کا مطلب تھا "تالیف کے دوران انحصار کی ضرورت"۔ لیکن پھر اسے (انگریزی میں Superseded میں) نفاذ کے ساتھ تبدیل کر دیا گیا۔ آپ سیکشن " API اور نفاذ کی علیحدگی " میں تبدیلی کے بارے میں مزید پڑھ سکتے ہیں۔ یہ پتہ چلتا ہے کہ یہ انحصار "کمپائل کلاس پاتھ" پر ہوگا۔ لیکن بعض اوقات ہم چاہتے ہیں کہ ہمارا انحصار حتمی نمونے میں شامل ہو۔ کس لیے؟ مثال کے طور پر، ہمارے پاس ایک قابل عمل جار ہوگا، جس میں بذات خود ہر ضروری چیز ہونی چاہیے۔ پھر ہمیں کیا کرنا چاہیے؟ سب سے پہلے، ایسی کوئی سپورٹ "باکس سے باہر" نہیں ہے (یعنی بطور ڈیفالٹ، بغیر کسی اضافی کارروائی کے)۔ اس کی وضاحت اس حقیقت سے ہوتی ہے کہ ہر کوئی آرکائیو کو اپنے طریقے سے جمع کرنا چاہتا ہے، اور گریڈل کم سے کم ہونے کی کوشش کرتا ہے۔ ہم کلاس پاتھ پر جار آرکائیوز بھی استعمال نہیں کر سکتے (کوڈ میں اضافی ہیرا پھیری کے بغیر)، کیونکہ یہ اس طرح کام نہیں کرتا ( مزید تفصیلات کے لیے " اوریکل: JAR فائل کے کلاس پاتھ میں کلاسز شامل کرنا " دیکھیں)۔ لہذا، سب سے خوبصورت طریقہ بلڈ اسکرپٹ میں درج ذیل کوڈ ہے:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
جار ٹاسک سیٹنگز میں ہم یہ بتاتے ہیں کہ جار فائل مینی فیسٹ میں کیا شامل کیا جائے گا (دیکھیں " اوریکل: ایپلیکیشن کا انٹری پوائنٹ سیٹ کرنا ")۔ اور پھر ہم کہتے ہیں کہ وہ تمام انحصار جو تالیف کے لیے درکار تھے جار میں شامل کیے جائیں گے۔ ایک متبادل " گریڈل شیڈو پلگ ان " استعمال کرنا ہے ۔ یہ پیچیدہ لگ سکتا ہے، لیکن دوسرے پلگ ان زندگی کو آسان بنا سکتے ہیں۔ مثال کے طور پر، ویب ایپلیکیشن بناتے وقت (باقاعدہ چلنے والی جاوا ایپلی کیشن کے برخلاف)، ہم ایک خاص پلگ ان استعمال کریں گے - " گریڈل وار پلگ ان "، جس کا رویہ مختلف ہے اور وہاں ہماری زندگی آسان ہو جائے گی (تمام ضروری انحصار خود پلگ ان کے ذریعہ ایک علیحدہ خصوصی ڈائرکٹری میں رکھا جائے۔ اس طرح کے کام کو اس بات سے منظم کیا جاتا ہے کہ ویب ایپلیکیشنز کو کس طرح تشکیل دیا جانا چاہئے۔ لیکن یہ بالکل مختلف کہانی ہے)۔
گریڈل - 9 کا فوری تعارف

نتائج

گریڈل پروجیکٹ کی تعمیر کے نظام کے لیے ایک بہترین انتخاب ہے۔ اس کی تصدیق اس حقیقت سے ہوتی ہے کہ اسے اسپرنگ اور ہائبرنیٹ جیسے معروف پروجیکٹس کے ڈویلپرز استعمال کرتے ہیں۔ صرف سب سے بنیادی چیزیں اوپر زیر بحث آئیں۔ ان کے پیچھے ایک ملین خصوصیات اور مواقع پوشیدہ ہیں جو ڈویلپرز کے پاس ہیں۔ گریڈل ملٹی ماڈیول پروجیکٹس کی تخلیق کی بھی حمایت کرتا ہے، جس کا اس جائزے میں احاطہ نہیں کیا گیا ہے، لیکن خود گریڈل کا ایک بہترین ٹیوٹوریل ہے: " ملٹی پروجیکٹ بلڈز بنانا "۔ مجھے امید ہے کہ اس جائزے نے یہ بھی ظاہر کیا ہے کہ Gradle کی دستاویزات 5+ پر لکھی گئی ہیں اور اگر آپ سمجھتے ہیں کہ کہاں دیکھنا ہے تو آپ آسانی سے اپنی ضرورت کو تلاش کر سکتے ہیں۔ اور یہ تب آئے گا جب آپ بنیادی باتوں کو سمجھیں گے۔ اس کے علاوہ، گریڈل کے پاس زبردست سبق ہیں۔ میں اس کی ایک چھوٹی سی فہرست کے ساتھ ختم کرنا چاہتا ہوں کہ آپ گریڈل کا استعمال کرتے ہوئے اور کیا دیکھ سکتے ہیں:
گریڈل - 10 کا ایک فوری تعارف
#ویاچسلاو
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION